La transition d’Android vers Rust a réduit le nombre de vulnérabilités de mémoire d’un cinquième en cinq ans

Root.cz » Sécurité »

La transition d’Android vers Rust a réduit le nombre de vulnérabilités de mémoire d’un cinquième en cinq ans

Auteur : Depositphotos

Google affirme que le passage à des langages sécurisés en mémoire comme Rust dans le cadre d’une approche sécurisée dès la conception a conduit à réduire les vulnérabilités de la mémoire sous Android en six ans, de 76 % à 24 % de toutes les vulnérabilités découvertes. Ce changement de nouvelles fonctionnalités réduit non seulement le risque de sécurité global, mais permet également une transition plus « évolutive et rentable ».

Il est toutefois intéressant de noter que le nombre de vulnérabilités sécurisées en mémoire a tendance à diminuer malgré l’augmentation de la quantité de nouveau code qui n’est pas sécurisé en mémoire. Ce paradoxe s’explique par le fait que les vulnérabilités diminuent de façon exponentielle, l’étude révélant qu’un nombre élevé de vulnérabilités se trouvent souvent dans du code nouveau ou récemment modifié.

Google a officiellement annoncé son intention de prendre en charge le langage de programmation Rust sur Android en avril 2021. Mais selon ses propres mots, il a commencé à donner la priorité à la transition des nouveaux développements vers des langages sécurisés en mémoire vers 2019. En conséquence, le nombre de Les vulnérabilités de mémoire découvertes dans le système d’exploitation Android sont passées de 223 en 2019 à moins de 50 en 2024.

Avez-vous trouvé une erreur dans l’article ?

Petr Krčmař

Petr Krčmář travaille comme rédacteur en chef du serveur Root.cz. Il a étudié l’informatique et les médias, il est donc tiraillé entre les deux domaines. Il essaie de faire les deux du mieux qu’il peut.

`; if (youtubeIframe !== null && iinfoVastUrls.length > 0) { const re = /embed/(.*)?/; const youtubeId = youtubeIframe.src.match(re)[1]; const youtubeImg = ‘ + youtubeId + ‘/hqdefault.jpg’; laissez thumbWrap = `

`; pouceWrap += ``thumWrap += “; youtubeIframe.after(document.createRange().createContextualFragment(thumbWrap)); youtubeIframe.style.display = ‘aucun’; const youtubeThumb = document.getElementById(‘ytPrerollThumb’) let prerollAdInitialized = false; document.addEventListener(‘DOMContentLoaded’, handleInitScroll, false); window.addEventListener(‘scroll’, handleInitScroll, false); function handleInitScroll() { if (prerollAdInitialized === false) { const containersOffset = document.getElementById(‘ytPrerollThumb’).getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top 0.0) { prerollAdInitialized = true ; console.log(‘Pré-roll : INIT’); setTimeout(() => { youtubeThumb.remove(); playPrerollAd(); }, 2000); document.removeEventListener(‘DOMContentLoaded’, handleInitScroll, false); window.removeEventListener(‘scroll’, handleInitScroll, false); } } } } laissez AdsManager ; laissez adsLoader ; laissez adDisplayContainer ; laissez iinfoPrerollPosition; laissez iinfoVastUrlIndex = 0 ; laissez iinfoVastUrlIndexMuted = 0 ; laissez prerollCurrent = 0 ; laissez adVolume = 0 ; laissez prerollWidth = 480 ; laissez prerollHeight = 320 ; laissez prerollDocument ; laissez videoContent ; laissez prerollLastError = 303 ; laissez prerollContainer ; laissez prerollPaused = false; function playPrerollAd() { youtubeIframe.after(document.createRange().createContextualFragment(videoEl)); iinfoPrerollPosition = document.getElementById(‘iinfoPrerollPosition’); document.getElementById(‘preroll-iframe’).srcdoc=””; 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 = ‘aucun’; videoContent.volume = 1 ; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== non défini) { playPromise.then(function () { console.log(‘Son PREROLL autorisé’); // setUpIMA(true); videoContent.volume = 0; videoContent.muted = true; setUpIMA(false ); }).catch(function () { console.log(‘Son PREROLL interdit’); videoContent.volume = 0; videoContent.muted = true; setUpIMA(false); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA(sound) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale(‘cs’); google.ima.settings.setNumRedirects(10); // Crée le conteneur d’affichage des publicités. createAdDisplayContainer(); // Créer un chargeur de publicités. adsLoader = nouveau google.ima.AdsLoader(adDisplayContainer); // Écoutez et répondez aux annonces chargées et aux événements d’erreur. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // Un écouteur d’événement pour indiquer au SDK que notre vidéo de contenu // est terminée afin que le SDK puisse lire toutes les publicités post-roll. const contentEndedListener = function () { adsLoader.contentComplete(); } ; videoContent.onended = contentEndedListener; // Demander des annonces vidéo. const adsRequest = new google.ima.AdsRequest(); /*adsRequest.adTagUrl=” + ‘iu=/21775744923/external/single_preroll_skippable&sz=640×480&’ + ‘ciu_szs=300×250%2C728x90&gdfp_req=1&’ + ‘output=vast&unviewed_position_start=1&env=vp&impl=s &correlator=”;*/adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; si (son) {adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log(“Annonce Preroll : ‘ + iinfoVastUrls[iinfoVastUrlIndex]); prerollCurrent = 0 ; videoContent.muted = false; videoContent.volume = 1 ; } autre { adsRequest.adTagUrl = iinfoVastUrlsMuted[iinfoVastUrlIndexMuted]; console.log(‘Annonce Preroll : ‘ + iinfoVastUrlsMuted[iinfoVastUrlIndexMuted]); prerollCurrent = 1 ; videoContent.muted = true ; vidéoContent.volume = 0 ; } // Spécifiez les tailles d’emplacement linéaires et non linéaires. Cela aide le SDK à // sélectionner la bonne création si plusieurs sont renvoyées. // adsRequest.linearAdSlotWidth = prerollWidth ; // adsRequest.linearAdSlotHeight = prerollHeight ; adsRequest.nonLinearAdSlotWidth = 0 ; adsRequest.nonLinearAdSlotHeight = 0 ; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // Nous supposons que adContainer est l’identifiant DOM de l’élément qui hébergera // les publicités. prerollDocument.getElementById(‘videoContent’).style.display = ‘none’; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById(‘adContainer’), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; si (adVolume) {adsManager.setVolume(0.3); prerollDocument.getElementById(‘adMuteBtn’).innerHTML = ”; } autre {adsManager.setVolume(0); prerollDocument.getElementById(‘adMuteBtn’).innerHTML = ”; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Obtenez le gestionnaire de publicités. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true ; adsRenderingSettings.loadVideoTimeout = 12 000 ; // videoContent doit être défini sur l’élément de contenu vidéo. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Ajoutez des écouteurs aux événements requis. 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); // Écoutez tous les événements supplémentaires, si nécessaire. 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() { // Initialise le conteneur. Doit être effectué via une action utilisateur sur les appareils // mobiles. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialise le gestionnaire de publicités. La playlist des règles relatives aux annonces démarrera à ce moment-là. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Appelez play pour commencer à diffuser l’annonce. Les annonces vidéo uniques et en superposition // démarreront à ce moment-là ; l’appel sera ignoré pour les règles relatives aux annonces. adsManager.start(); // window.addEventListener(‘resize’, function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // Une erreur peut être générée s’il y a un problème avec la réponse VAST. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log(‘Événement Preroll : ‘ + 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”; casser; cas google.ima.AdEvent.Type.STARTED: window.addEventListener(‘scroll’, onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Exemple : const leftTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // toutes les 300 ms } prerollDocument.getElementById(‘adMuteBtn’).style.display = ‘block’; casser; cas google.ima.AdEvent.Type.ALL_ADS_COMPLETED : if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } casser; cas google.ima.AdEvent.Type.COMPLETE : if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); casser; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { if (prerollCurrent === 0) { iinfoVastUrlIndex++; if (iinfoVastUrlIndex 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = faux ; } renvoie vrai ; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = vrai ; } } } renvoie faux ; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = ‘bloc’; youtubeIframe.src += ‘&autoplay=1&mute=1’; } }
#transition #dAndroid #vers #Rust #réduit #nombre #vulnérabilités #mémoire #dun #cinquième #cinq #ans

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.