Eset: Zdrojem adwaru na macOS byly v únoru falešné aplikace pro stažení torrentů

15. 3. 2024
Doba čtení: 2 minuty

Sdílet

Autor: Depositphotos
Nejčastěji detekovanými škodlivými kódy v Česku a na Slovensku byly v únoru pro platformu macOS adware Pirrit, Bundlore a MaxOfferDeal.

Společnost Eset informuje, že mezi nejčastějšími únorovými kybernetickými hrozbami pro platformu macOS se opět objevily adware Pirrit a Bundlore. Po delší odmlce se na přední příčky vyšplhal také adware MaxOfferDeal, který útočníci šíří s využitím optimalizace pro vyhledávače, SEO.  

Pirrit je v Česku stabilní hrozbou. Útočníci ho šíří prostřednictvím různých aplikací nebo nástrojů a kromě toho, že má negativní vliv na výkon zařízení a znepříjemňuje práci na počítači při procházení internetu, může být prostředníkem ke stažení dalšího malwaru.

„V únoru se mezi detekovanými falešnými aplikacemi, jejichž prostřednictvím se adware a další škodlivé kódy šíří na platformě macOS nejčastěji, objevily převážně nástroje pro stahování torrentů a cracknutého softwaru,“ říká Jiří Kropáč, vedoucí virové laboratoře Esetu v Brně.

„Je tak zajímavé sledovat, že útočníci zvolili zrovna tyto nástroje, aby uživatele přiměli ke stahování mimo oficiální místa. Filmy, seriály nebo software zdarma jsou tak pro uživatele stále evidentně lákadlem,“ dodává.

Kromě podvržených aplikací Torrent Downloader a Crack Installer se podle Esetu nadále objevuje falešná aplikace Adobe Flash Player installer. Konkrétně v jejím případě bezpečnostní specialisté opakovaně upozorňují na to, že podpora Adobe Flash Playeru byla ukončena v roce 2020 a na oficiálních distribučních místech již není v nabídce.

Škodlivé reklamy optimalizované pro vyhledávače

Kromě adwaru Pirrit a adwaru Bundlore se v únoru v detekcích opět objevil adware MaxOfferDeal. Ačkoli se tento škodlivý kód neobjevuje ve statistice nijak pravidelně, i na něj mohou uživatelé v Česku narazit již několikátým rokem.

„Adware, jak už jeho název napovídá, je reklamní škodlivý kód. Jeho přítomnost v zařízení se projevuje právě velkým množstvím vyskakovacích oken s různými reklamními nabídkami, a to často poměrně agresivním způsobem, kdy například tato okna nejdou vůbec zavřít, nebo jsou jimi uživatelé zahlceni,“ popisuje Jiří Kropáč.

„Adware MaxOfferDeal pak útočníci šíří i pomocí optimalizace pro vyhledávače, SEO, známého nástroje online marketingu. Díky tomu dokáží uživatelům nabídnout falešné aplikace nebo programy přímo mezi výsledky vyhledávání na internetu,“ upřesňuje.

Nejčastější kybernetické hrozby v Česku a na Slovensku pro platformu macOS za únor 2024:

1. OSX/Adware.Pirrit (11,9 %)

2. OSX/Adware.MaxOfferDeal (3,1 %)

3. OSX/Adware.Bundlore (2,4 %)

4. OSX/TrojanDownloader.Adload (2,4 %)

5. OSX/Agent (0,7 %)

Zdroj: Eset

Čtěte dále

IDC: Cla necla, globální dodávky počítačů by letos měly vyrůst o 4 %
IDC: Cla necla, globální dodávky počítačů by letos měly vyrůst o 4 %
Optoma Photon Go: Chytrý přenosný projektor s ultra krátkou projekční vzdáleností
Optoma Photon Go: Chytrý přenosný projektor s ultra krátkou projekční vzdáleností
Téměř dvě třetiny firem preferují uchovávat zálohu v cloudu
Téměř dvě třetiny firem preferují uchovávat zálohu v cloudu
Arrow posiluje nabídku úložišť, podepsalo smlouvu s Object First
Arrow posiluje nabídku úložišť, podepsalo smlouvu s Object First
Polovina českých podnikatelů neví, jak se bránit proti kybernetickým útokům
Polovina českých podnikatelů neví, jak se bránit proti kybernetickým útokům
Tomáš Břečka je novým country managerem iStyle
Tomáš Břečka je novým country managerem iStyle
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »