;

Vyhnání z ráje: Jablko už není nedotknutelné

20. 3. 2012
Doba čtení: 4 minuty

Sdílet

Autor: Fotolia © babimu
Hrozby pro platformu Mac rychle stoupají žebříčky četnosti výskytu malwaru – děje se tak proto, že si Mac OS X získává přízeň stále více uživatelů a výrazněji se uplatňuje také v podnikové sféře.

S ohledem na to, jak nízké povědomí o (ne)bezpečnosti této platformy uživatelé mají, se pro útočníky jedná o jednu z oblastí, na něž se v blízké budoucnosti zaměří nejintenzivněji.

Uvedené tvrzení se opírá o výsledky průzkumu provedeného v USA společností iSec Partners  – podle něj se jen 20?% Američanů domnívá, že počítače Mac mohou být náchylné k napadení počítačovými viry. Naproti tomu o PC si nadpoloviční většina respondentů myslela, že jsou „zranitelné“ nebo dokonce „velmi zranitelné“. To v konečném důsledku znamená, že si uživatelé Maců připadají velmi bezpečně a nepociťují potřebu se před hrozbami jakkoliv chránit. Stávají se tak paradoxně daleko zranitelnějšími v porovnání s uživateli PC, kteří již s nejvyšší pravděpodobností měli nějaký problém s malwarem, a tak se chovají výrazně zodpovědněji.

MacDefender již neútočí, ale...

Hrozby pro platformu Mac byly dosud povětšinou navrženy v duchu sociálního inženýrství  – příkladem může být například MacDefender, falešný antivirus, který se snažil vynutit pozornost uživatelů tím, že přímo zaútočil na jejich přesvědčení o domněle dokonalé bezpečnosti Maců a varoval je před možnými riziky. MacDefender se objevil v dubnu a květnu  – společnost Apple reagovala s mírným zpožděním tak, že vydala patch, který uvedenou zranitelnost odstranil a z nakažených počítačů nežádoucí software smazal.

Alex Stamos z iSec Partners tvrdí, že počítače Mac vybavené OS X Lion jsou tak zranitelné, že by neměly být sdružovány do počítačových sítí. Myslí si, že by Macy měly být využívány pouze jako samostatné počítače a měly by být zapojovány pouze do IP nebo Windows sítí, ne těch, které jsou primárně navrženy pro Mac. Síťové protokoly Mac Serveru, zejména pak DHX uživatelská autentizace, jsou podle něj navrženy pro snadné používání, ale rozhodně ne z hlediska zajištění potřebné bezpečnosti. Pro hackery je podle Stamose velmi snadné přesvědčit uživatele, aby realizoval download souboru, který následně způsobí přetečení bufferu v paměti serveru, a umožní tak útočníkovi přístup ke v zásadě libovolným právům. DNS služby v Apple sítích podle Stamose nevyžadují šifrování, a tak jsou náchylné na malware, který dokáže odposlechnout ID jednotlivých strojů a následně je replikovat. Rizikové je rovněž chování VPN spojení, kdy po jeho přerušení v paměti Macu zůstávají uloženy komunikační klíče, jež mohou být snadno zneužity. Mac servery uznávají celou řadu autentizačních protokolů, ale nedokážou zabránit malwaru v tom, aby prováděl postupný downgrade na nejméně bezpečný z nich, čímž mu v zásadě umožňují hledání nejméně bezpečného bodu a jeho následné prolomení.

„Provozujte svůj Mac jako malý ostrůvek v nepřátelském oceánu,“ navrhuje Stamos. „Jakmile jednou nainstalujete OS X Server, stáváte se až příliš snadnou kořistí,“ uzavírá celou problematiku.

Počítače Mac napadlo menší Tsunami

V průběhu října objevil výzkumný tým společnosti Eset novou hrozbu, jež byla původně vytvořena pro Linux a která nyní může ohrozit počítače s operačním systémem Mac OS X. Jedná se o modifikaci linuxového kódu, původně označovaného jako Linux/Tsunami a nyní detekovaného jako OSX/Tsunami.A.

Trojan pro Mac OS X přezdívaný Tsunami je backdoor řízený přes otevřený protokol IRC (Internet Relay Chat), který umožňuje, aby se nakažený počítač stal botem pro útoky typu distribuovaného odmítnutí služby (Distributed Denial of Service). Obsahuje pevně definovaný seznam IRC serverů a kanálů, k nimž se pokouší připojit, a následně jako klient „naslouchá“ a provádí příkazy přicházející z vytvořeného kanálu. Tento backdoor umožňuje vzdálenému uživateli stahování a posílání souborů, například dalšího malwaru nebo aktualizace kódu Tsunami, a navíc vykonávání příkazů v prostředí příkazového řádku, což mu v zásadě otevírá cestu k ovládnutí infikovaného počítače.

„Dva vzorky stejného kódu byly nalezeny v různých částech světa, byly mezi nimi však drobné rozdíly. Telemetrická data společnosti Eset navíc indikují velmi malý počet nakažených hostitelských počítačů, což naznačuje, že tento malware je zatím ve fázi testování. Tato hrozba není nijak vyspěle propracovaná ani složitá, takže riziko pro uživatele počítačů Mac není značné,“ říká Pierre-Marc Burelu, vedoucí výzkumu malwaru ve společnosti Eset.

'; 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 »