;

Bezpečná autentizace vyřeší velkou část problémů

5. 6. 2014
Doba čtení: 4 minuty

Sdílet

Autor: © fabioberti.it - Fotolia.com
Z informační bezpečnosti se stává konkurenční výhoda. Zákazníci se budou zdráhat poskytnout své citlivé údaje hazardérům, říká Petr Šnajdr, bezpečnostní expert ESET software.

(PR článek)

V poslední době přibývají další a další zprávy o únikách dat – mají tyto incidenty něco společného? A opravdu je nevyhnutelné, aby k nim docházelo?

Podrobností o bezpečnostních incidentech je obvykle málo. Postižené organizace se navíc logicky snaží, aby jejich klienti dostali jen ty nejnutnější informace, a s detaily se obvykle nechlubí. A odborná veřejnost dostane bližší informace se zpožděním – pokud je vůbec dostane.

Společný jmenovatel většiny bezpečnostních incidentů se však najít dá: velmi často je to selhání lidského faktoru v kombinaci s absencí základních bezpečnostních mechanismů. Překvapivě často jde o nedostatky v zabezpečení přístupu k systémům a datům. Příkladem je nedávný únik klientských informací z aukčního portálu eBay, který se týkal téměř 150 milionů uživatelů. Nepříjemné je, že unikla data včetně hesel.

Ta však byla údajně zašifrována…

To sice byla, ale neví se, jak silná šifra to byla. Uživatelé eBay byli pro jistotu vyzváni, aby si své heslo změnili, a to všude, kde ho případně používají. Mimochodem, to je opravdu nebezpečná praxe, používat stejné heslo k různým službám.

Ale vraťme se k tomu, proč je eBay příkladem nedostatků v zabezpečení přístupu k systémům a datům. Z pohledu uživatelů je problém, že tento aukční dům nepatří mezi poskytovatele internetových služeb, kteří svým zákazníkům nabízejí jako doplňkový bezpečnostní prvek dvoufaktorovou autentizaci. Tuto možnost v poslední době zavedly například společnosti Google, Facebook, Apple, Twitter a další, a jde o zásadní posílení bezpečnosti. Uživatel totiž musí kromě běžných přihlašovacích údajů zadat také jednorázové heslo, které mu daná služba doručí například formou SMS zprávy. V kauze eBay by to znamenalo, že útočník, který by se snažil dostat k účtu uživatele na základě jeho kompromitovaného hesla, by stejně neuspěl, protože by neznal jednorázové heslo. Naopak, majitel účtu by se o pokusu o nelegitimní přístup okamžitě dozvěděl.

Takže dvoufaktorová autentizace je podle Vás řešením

Ano, a ne jen na uživatelské straně. Ze způsobu útoku na eBay se navíc dá vyvodit, že adekvátní autentizací – přičemž za standardní řešení se v tomto případě všeobecně považuje dvoufaktorová autentizace - nebyly chráněné ani kritické firemní systémy eBay.

Jak si to vysvětlujete?

Nejspíš půjde o kombinaci důvodů. Prosté podcenění rizik, neochota investovat do bezpečnosti, rezistence IT personálu proti doplňkovému zabezpečení přístupu… Převažujícím důvodem však nejspíš bude podcenění rizik. Řešení pro dvoufaktorovou autentizaci je totiž překvapivě levné, zvlášť pokud jde o moderní řešení na bázi jednorázového hesla, kde funkci tokenu plní smartphone nebo tablet. V tom případě navíc odpadá o velká část obav z nepohodlí uživatelů. Jistě, hardwarový token je další předmět, který uživatel musí mít u sebe a nesmí ho ztratit. Ale nutnost mít u sebe smartphone, to přece není nic navíc, ne?

Bude podle Vás přibývat firem, které víc dbají na zabezpečení přístupu?

Předpokládám, že je k tomu dotlačí zákazníci. Úniků dat totiž přibývá a zákazníci se cítí ohroženi. Nadchází doba, kdy se budou zdráhat poskytnout své citlivé údaje někomu, kdo nebude schopen prokázat, že s nimi dokáže zacházet odpovědně. Nebo kdo dokonce naopak ukazuje laxní přístup – jako třeba právě eBay. Uživatel, který na tomto portálu zadává své heslo, se dozví, že heslo Pasword1 je středně silné. Pokud tohle reprezentuje postoj eBay k bezpečnosti, tak se žádnému úniku dat nemůžeme divit...

Cyber25

Jinými slovy, z informační bezpečnosti se pomalu stává konkurenční výhoda. Sice pomaleji, než bychom si jako dodavatelé bezpečnostních řešení a služeb přáli, ale ten trend je nezadržitelný.

 

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