Spam se vrací na scénu

4. 1. 2015

Sdílet

Autor: © Photosani - Fotolia.com
Phishingové útoky, které dříve zachycoval spamový filtr, se z ničeho nic dostávají až do doručené pošty zaměstnanců.

Jak by mohl být v současné době spam problémem pro správce zabezpečení? Už jsou to roky, co jsme všichni začali používat služby, které odvádějí fenomenální práci při filtrování reklamy na léky na předpis či exotické dovolené a odkládají ji do složek se spamem, kde se obvykle hromadí a již nikoho neobtěžují.

Až do minulého pátku jsem za posledních deset let nestrávil přemýšlením nad spamem snad ani pět minut, což je důkaz skutečné efektivity spamových filtrů. Koneckonců asi 98 % našich příchozích e-mailů je spam. Pokud bychom neměli účinné stroje pro filtrování spamu, dostal by každý zaměstnanec denně navíc 40 až 50 e-zpráv. A to by významně snížilo jejich produktivitu.

Asi proto, že se naši pracovníci již dlouho nesetkali se skutečným spamem, našeho právního zástupce vystrašilo, když začal v poslední době pravidelně dostávat zprávy, které považoval za nevyžádanou poštu.

Některé z nich mi přeposlal a chtěl vědět, co se děje. Tyto e-maily tvrdí, že jsou z organizací, jako je třeba FedEx, a na první pohled vypadají legitimně. Jen kontrola e-mailových hlaviček vám řekne, že je tomu jinak.

Některé zprávy obsahují odkazy na podezřelé weby v místech, jako jsou Čína a Rusko. Jiné zase zahrnují přílohy, které jsou údajně požadovanými certifikáty nebo e-faxovými dokumenty, ale ve skutečnosti jsou to soubory ZIP obsahující soubor EXE. Stručně řečeno – to není jen obyčejný spam, který je sice otravný a zahlcuje sítě, ale jinak je obvykle neškodný. Ne, toto jsou phishingové útoky.

Brzy si začali stěžovat na nárůst spamu i další lidé ve firmě. Jaktože jsem chtěl vědět, proč nedošlo k eliminaci těchto phishingových útoků a k ochraně schránek zaměstnanců?

Uvědomoval jsem si, že právě migrujeme uživatele do spravované e-mailové služby od Microsoftu a že se mluvilo o úspoře financí ukončením odběru antispamové služby našeho současného poskytovatele ve prospěch spamové prevence od Microsoftu, která je součástí jím poskytované služby.

 

Přechod s obtížemi

Myslel jsem si, že právě to je pravděpodobným zdrojem problému, a opravdu – mé podezření bylo správné.

Dříve jsme nejen dělali kontrolu příloh, ale také jsme omezovali typy příloh, které bylo možné doručovat. Používali jsme také řešení SPF (Sender Policy Framework), které zjišťovalo, zda jsou odesílatelé skutečně těmi, za koho se vydávají.

Když náš IT tým migroval e-mail na službu Microsoftu, zanedbal implementaci těchto důležitých bezpečnostních funkcí. Spam se tak pro mě v současné době stal záležitostí, kterou jsem musel začít řešit. Nyní totiž mohou zaměstnanci kliknout na přílohy nebo odkazy a spustit škodlivé programy.

Naštěstí náš software pro ochranu koncových bodů zabránil většině příloh způsobit škodu, ale detekce nebyla úplná. Proto náš bezpečnostní tým analyzuje zjištěné podezřelé e-mailové přílohy či odkazy a vytváří pravidla v nástroji SIEM, aby zjišťoval případy, kdy zaměstnanci klikli na některé z nich nebo si stáhli malware.

Nedávno jsme také zapli opravdu skvělou funkci Wildfire na firewallech Palo Alto Networks, která přesměruje spustitelné soubory do zabezpečené karantény, kde se zjišťuje, zda jsou škodlivé. Protože je to novinka, zprovoznili jsme jen monitorování událostí a zatím jsme neaktivovali blokování.

Již několikrát jsme museli rychle jednat, ale dosud jsme měli štěstí. Na základě zkoumání se ukázalo, že jedna příloha, kterou několik zaměstnanců spustilo, kontaktovala server v Číně, aby přes něj stáhla další software. Server naštěstí nebyl v provozu.

Nyní musíme nadále sledovat podezřelé aktivity a já musím zajistit bezpečnou implementaci naší současné e-mailové architektury.

Cyber25

 

Tento příspěvek do Zápisníku manažera pro bezpečnost napsal skutečný manažer bezpečnosti, který zde vystupuje jako Mathias Thurman. Jeho pravé jméno ani jméno zaměstnavatele z pochopitelných důvodů neuvádíme.

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