	{"id":64948,"date":"2021-10-29T08:24:28","date_gmt":"2021-10-29T07:24:28","guid":{"rendered":"https:\/\/www.artefact.com\/?post_type=news&#038;p=64948"},"modified":"2024-09-20T17:45:46","modified_gmt":"2024-09-20T16:45:46","slug":"how-to-secure-your-python-software-supply-chain","status":"publish","type":"blog","link":"https:\/\/www.artefact.com\/fr\/blog\/how-to-secure-your-python-software-supply-chain\/","title":{"rendered":"Comment s\u00e9curiser votre cha\u00eene d'approvisionnement en logiciels Python ?"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling article-author\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">Auteur<\/h2><\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27150%27%20height%3D%270%27%20viewBox%3D%270%200%20150%200%27%3E%3Crect%20width%3D%27150%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/benoit-goujon.jpeg\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left article-author-image\" style=\"width: 150px; border-radius: 54% 46% 77% 23% \/ 74% 40% 60% 26%; overflow: hidden;\" width=\"150\" height=\"auto\" \/><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three article-author-name-title\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Beno\u00eet Goujon<\/h3><\/div><div class=\"fusion-text fusion-text-1 article-author-description\"><p>Data ing\u00e9nieur \u00e0 Artefact<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-margin-top:40px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column fusion-flex-align-self-center fusion-column-inner-bg-wrapper\" style=\"--awb-padding-top:20px;--awb-padding-right:20px;--awb-padding-bottom:20px;--awb-padding-left:20px;--awb-overflow:hidden;--awb-inner-bg-size:cover;--awb-border-color:rgba(10,17,40,0.1);--awb-border-top:1px;--awb-border-right:1px;--awb-border-bottom:1px;--awb-border-left:1px;--awb-border-style:solid;--awb-border-radius:4px 4px 4px 4px;--awb-inner-bg-border-radius:4px 4px 4px 4px;--awb-inner-bg-overflow:hidden;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><span class=\"fusion-column-inner-bg hover-type-none\"><a class=\"fusion-column-anchor\" href=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/how-to-secure-your-python-software-supply-chain-81490f6e4ff9\" rel=\"noopener noreferrer\" target=\"_blank\"><span class=\"fusion-column-inner-bg-image\"><\/span><\/a><\/span><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-row fusion-flex-align-items-center\"><div class=\"fusion-text fusion-text-2\"><p><u>Lisez notre article sur<\/u><\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-margin-right:20px;--awb-margin-left:20px;--awb-max-width:150px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"4000\" height=\"992\" title=\"Moyen Blog\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png\" alt class=\"lazyload img-responsive wp-image-60582\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%274000%27%20height%3D%27992%27%20viewBox%3D%270%200%204000%20992%27%3E%3Crect%20width%3D%274000%27%20height%3D%27992%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-200x50.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-400x99.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-600x149.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-800x198.png 800w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-1200x298.png 1200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png 4000w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 4000px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-3\"><p>.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-4 description\"><p>Un guide pour prendre conscience des risques auxquels vous \u00eates expos\u00e9s et quelques conseils pour vous en pr\u00e9munir.<br \/>\n Un nouveau type de cybermenace est apparu r\u00e9cemment : les attaques de la cha\u00eene d'approvisionnement en logiciels. Bien que rares, elles ont un impact consid\u00e9rable et la protection contre ces attaques est une pr\u00e9occupation croissante. En raison de la diversit\u00e9 des cas d'utilisation, il n'y a pas de r\u00e8gle unique \u00e0 appliquer \u00e0 vos projets Python pour \u00eatre en s\u00e9curit\u00e9 et, comme toujours, cela d\u00e9pend de votre contexte.<\/p>\n<\/div><\/div><\/div><\/div><\/div><article class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">Introduction<\/h2><\/div><div class=\"fusion-text fusion-text-5\"><p>Dans les industries traditionnelles, une cha\u00eene d'approvisionnement est tout ce qui permet \u00e0 une entreprise de livrer un produit au client. Par exemple, lorsque vous achetez un croissant \u00e0 la boulangerie, tous les ingr\u00e9dients, l'emballage et le transport font partie de la cha\u00eene d'approvisionnement.<\/p>\n<\/div><div class=\"fusion-text fusion-text-6\"><p>Dans le domaine du logiciel, une cha\u00eene d'approvisionnement est tout ce qui affecte votre logiciel avant son d\u00e9ploiement en production. Elle couvre tout, de la phase de d\u00e9veloppement au processus de mise en production, y compris le code que vous avez \u00e9crit, vos d\u00e9pendances, votre environnement de construction, votre IDE, votre registre d'images - chaque composant avec lequel votre logiciel interagit \u00e0 un moment ou \u00e0 un autre !<\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"700\" height=\"272\" title=\"article-benoit1\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1.png\" alt class=\"lazyload img-responsive wp-image-64951\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27700%27%20height%3D%27272%27%20viewBox%3D%270%200%20700%20272%27%3E%3Crect%20width%3D%27700%27%20height%3D%27272%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1-200x78.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1-400x155.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1-600x233.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit1.png 700w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 700px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-7\"><p>Le terme \u201ccha\u00eene d'approvisionnement\u201d a r\u00e9cemment \u00e9t\u00e9 mis en lumi\u00e8re par des cyberattaques qui ont eu un impact consid\u00e9rable. Parmi toutes les attaques, Solarwinds est peut-\u00eatre la plus c\u00e9l\u00e8bre. En effet, le gouvernement am\u00e9ricain, de grandes entreprises technologiques comme Microsoft et Intel, mais aussi des h\u00f4pitaux, des compagnies d'\u00e9lectricit\u00e9 et des institutions financi\u00e8res ont \u00e9t\u00e9 touch\u00e9s.<\/p>\n<p>Ironiquement, la cause premi\u00e8re est l'infection de Solarwinds Orion, un moniteur de s\u00e9curit\u00e9 r\u00e9seau. Le syst\u00e8me de construction a \u00e9t\u00e9 compromis et toutes les nouvelles versions entre mars et juin 2020 ont \u00e9t\u00e9 infect\u00e9es par des logiciels malveillants. Par cons\u00e9quent, tous les clients qui ont mis \u00e0 jour leur logiciel au cours de cette p\u00e9riode ont \u00e9t\u00e9 compromis.<\/p>\n<\/div><div class=\"fusion-text fusion-text-8\"><p>M\u00eame si l'attaque de Solarwinds a \u00e9t\u00e9 largement couverte par les m\u00e9dias, il existe des dizaines d'attaques similaires dont nous n'avons jamais entendu parler. Heureusement, la Cloud Native Computing Foundation les recense toutes dans une base de donn\u00e9es.\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/cncf\/tag-security\/tree\/main\/supply-chain-security\/compromises\" target=\"_blank\" rel=\"noopener ugc nofollow\">d\u00e9p\u00f4t public<\/a>. Vous serez peut-\u00eatre surpris par l'acc\u00e9l\u00e9ration de ces attaques au cours des derni\u00e8res ann\u00e9es.<\/p>\n<p>Il n'est pas possible de couvrir tous les aspects li\u00e9s \u00e0 la s\u00e9curit\u00e9 de la cha\u00eene d'approvisionnement dans un seul article de blog. C'est pourquoi nous nous concentrerons dans cet article sur les projets qui utilisent Python comme langage principal.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Comment g\u00e9rer vos d\u00e9pendances en Python ?<\/h3><\/div><div class=\"fusion-text fusion-text-9\"><p>M\u00eame si Python a une philosophie \u201cbatteries incluses\u201d, vous avez souvent besoin de biblioth\u00e8ques externes que vous pouvez t\u00e9l\u00e9charger \u00e0 partir de PyPI, l'index officiel des paquets, et c'est \u00e0 ce stade que vous devez \u00eatre tr\u00e8s prudent.<\/p>\n<p>L'\u00e9cosyst\u00e8me Python a d\u00e9j\u00e0 \u00e9t\u00e9 cibl\u00e9, notamment par l'utilisation de deux techniques :<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-1 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Le squattage de typos<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Confusion de d\u00e9pendance<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-10\"><p>La premi\u00e8re technique concerne une commande que tout d\u00e9veloppeur Python a ex\u00e9cut\u00e9e au moins une fois au cours de sa carri\u00e8re :<\/p>\n<pre class=\"hp hq hr hs ht ku gv be\"><span id=\"3357\" class=\"ej je jf dm kv b kw kx ky s kz\" data-selectable-paragraph=\"\">pip install <\/span><\/pre>\n<p>Les pirates publient des paquets portant presque le m\u00eame nom que des paquets existants en esp\u00e9rant que vous ferez une erreur de frappe et que vous installerez leur paquet au lieu du paquet officiel. Par exemple, un paquet appel\u00e9\u00a0<code class=\"kg la lb lc kv b\">python3-dateutil<\/code>\u00a0au lieu de l'officiel\u00a0<code class=\"kg la lb lc kv b\">dateutil<\/code>\u00a0a \u00e9t\u00e9\u00a0<a class=\"bv ig\" href=\"https:\/\/snyk.io\/blog\/malicious-packages-found-to-be-typo-squatting-in-pypi\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">r\u00e9cemment d\u00e9tect\u00e9<\/a>.<\/p>\n<p>La communaut\u00e9 python est\u00a0<a class=\"bv ig\" href=\"https:\/\/lwn.net\/Articles\/834078\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">travailler dur<\/a>\u00a0pour att\u00e9nuer le risque, mais celui-ci reste \u00e9lev\u00e9.<\/p>\n<p>La deuxi\u00e8me technique, la confusion de d\u00e9pendance, est plus sophistiqu\u00e9e que la premi\u00e8re.\u00a0<code class=\"kg la lb lc kv b\">tuyau<\/code>\u00a0fonctionne sous le capot.<\/p>\n<p>Cette fois, cette commande vous expose au risque :<\/p>\n<pre class=\"hp hq hr hs ht ku gv be\"><span id=\"a769\" class=\"ej je jf dm kv b kw kx ky s kz\" data-selectable-paragraph=\"\">pip install --extra-index-url <\/span><\/pre>\n<p>Lorsque vous tapez cette commande, voici ce qui se passe :<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27400%27%20height%3D%270%27%20viewBox%3D%270%200%20400%200%27%3E%3Crect%20width%3D%27400%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit2.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 400px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"400\" height=\"auto\" \/><div class=\"fusion-text fusion-text-11\"><p>Prenons un exemple :<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27400%27%20height%3D%270%27%20viewBox%3D%270%200%20400%200%27%3E%3Crect%20width%3D%27400%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/Article-benoit3.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 400px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"400\" height=\"auto\" \/><div class=\"fusion-text fusion-text-12\"><p>Dans cet exemple, le paquet du hacker malveillant sera install\u00e9 sur la machine. En effet, le num\u00e9ro de version le plus \u00e9lev\u00e9 figure dans l'index public des paquets.<\/p>\n<p>Vous avez peut-\u00eatre compris ce qui peut mal se passer avec ce processus. Quelqu'un de mal intentionn\u00e9 peut publier sur un d\u00e9p\u00f4t public des paquets portant les m\u00eames noms que ceux h\u00e9berg\u00e9s dans les index de paquets internes et les \u00e9tiqueter avec un num\u00e9ro de version ridiculement \u00e9lev\u00e9. De plus, trouver des noms de paquets pertinents n'est pas si difficile que cela.\u00a0<a class=\"bv ig\" href=\"https:\/\/\/fr\/&\/#47;&#109;&#x65;&#x64;iu&#109;&#46;&#x63;&#x6f;m\/&#64;&#97;&#x6c;&#x65;x&#46;&#98;&#x69;&#x72;&#x73;a&#110;\/dependency-confusion-4a5d60fec610\" rel=\"noopener\" target=\"_blank\">d\u00e9montr\u00e9 par ce chercheur en s\u00e9curit\u00e9<\/a>.<\/p>\n<p>Cette commande pourrait \u00eatre qualifi\u00e9e d\u201c\u201dinsecure by design\". Cette attaque exploite une fonctionnalit\u00e9 du gestionnaire de paquets Python et seuls quelques d\u00e9veloppeurs sont au courant de ce comportement.<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27400%27%20height%3D%270%27%20viewBox%3D%270%200%20400%200%27%3E%3Crect%20width%3D%27400%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit4.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 400px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"400\" height=\"auto\" \/><div class=\"fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Comment se d\u00e9fendre contre ces attaques de la cha\u00eene d'approvisionnement ?<\/h3><\/div><div class=\"fusion-text fusion-text-13\"><p>Pour vous pr\u00e9munir contre les attaques de \"typo-squatting\", vous pouvez utiliser un filtre de type\u00a0<strong class=\"ij lj\">verrouiller le fichier<\/strong>. A\u00a0<a class=\"bv ig\" href=\"https:\/\/www.youtube.com\/watch?v=VWWgkF-0cDQ\" target=\"_blank\" rel=\"noopener ugc nofollow\">bon fichier de serrure<\/a>\u00a0poss\u00e8de les attributs suivants :<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-2 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>Broches de version :<\/strong>ils rendent vos constructions pr\u00e9visibles et d\u00e9terministes.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>Hachures :<\/strong>\u00a0ils permettent de v\u00e9rifier l'int\u00e9grit\u00e9 du paquet.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>Graphique de d\u00e9pendance complet :<\/strong> cela vous permet \u00e9galement de contr\u00f4ler les d\u00e9pendances de vos d\u00e9pendances.<\/p>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-14\"><p>La bonne nouvelle, c'est qu'il existe un paquet dont le but est de cr\u00e9er un fichier de verrouillage pour vous :\u00a0<code class=\"kg la lb lc kv b\">pip-tools<\/code>. Quelques commandes suffisent pour g\u00e9n\u00e9rer un fichier de verrouillage dot\u00e9 de tous les attributs d\u00e9crits pr\u00e9c\u00e9demment.<\/p>\n<\/div><div class=\"fusion-text fusion-text-15\"><pre class=\"hp hq hr hs ht ku gv be\"><span id=\"0af8\" class=\"ej je jf dm kv b kw kx ky s kz\" data-selectable-paragraph=\"\">$ python3 -m venv my-env # cr\u00e9er un nouvel environnement virtuel\n<\/span><span id=\"6e92\" class=\"ej je jf dm kv b kw lk ll lm ln lo ky s kz\" data-selectable-paragraph=\"\">$ source my-env\/bin\/activate # activez-le\n<\/span><span id=\"eaf3\" class=\"ej je jf dm kv b kw lk ll lm ln lo ky s kz\" data-selectable-paragraph=\"\">$ pip install pip-tools==6.3.0 # installez le paquet qui vous permettra de g\u00e9rer correctement les d\u00e9pendances.\nde g\u00e9rer correctement vos d\u00e9pendances\n<\/span><span id=\"497e\" class=\"ej je jf dm kv b kw lk ll lm ln lo ky s kz\" data-selectable-paragraph=\"\">$ echo \u201csacremoses==0.0.46\u201d &gt;&gt; requirements.in # ajoutez le paquet de votre choix dans requirements.in.\nvotre choix dans requirements.in\n<\/span><span id=\"fb7a\" class=\"ej je jf dm kv b kw lk ll lm ln lo ky s kz\" data-selectable-paragraph=\"\">$ pip-compile --generate-hashes # compile le fichier requirements.txt avec des\ndes hachages bas\u00e9s sur ce que vous avez mis dans requirements.in<\/span><\/pre>\n<\/div><div class=\"fusion-text fusion-text-16\"><p>Votre fichier requirements.txt doit ressembler \u00e0 ceci :<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27400%27%20height%3D%270%27%20viewBox%3D%270%200%20400%200%27%3E%3Crect%20width%3D%27400%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit5.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 400px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"400\" height=\"auto\" \/><div class=\"fusion-text fusion-text-17\"><p>Maintenant que vous avez ce fichier qui contient toutes vos d\u00e9pendances avec leurs versions et hachages associ\u00e9s, vous pouvez ex\u00e9cuter la commande suivante lors du prochain d\u00e9ploiement :<\/p>\n<pre class=\"hp hq hr hs ht ku gv be\"><span id=\"7aa9\" class=\"ej je jf dm kv b kw kx ky s kz\" data-selectable-paragraph=\"\">pip install --require-hashes -r requirements.txt<\/span><\/pre>\n<p>Ainsi, vous \u00eates s\u00fbr que les paquets que vous utilisez en production n'ont pas \u00e9t\u00e9 modifi\u00e9s. En supposant que vous ayez \u00e9t\u00e9 prudent lors de l'\u00e9criture de votre\u00a0<code class=\"kg la lb lc kv b\">exigences.in<\/code>\u00a0\ud83d\udc40, vous pouvez \u00e9galement \u00eatre s\u00fbr de t\u00e9l\u00e9charger le paquet que vous voulez vraiment, car tout est automatis\u00e9. Aucun risque de faute de frappe !<\/p>\n<p>Cette bonne pratique permet de se pr\u00e9munir contre les attaques de \"typo-squatting\", mais qu'en est-il de la confusion des d\u00e9pendances ?<\/p>\n<p>Si vous regardez le\u00a0<code class=\"kg la lb lc kv b\">tuyau<\/code>\u00a0vous verrez qu'il y a deux options que vous pouvez utiliser pour t\u00e9l\u00e9charger des paquets \u00e0 partir d'un d\u00e9p\u00f4t interne :<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-3 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><code class=\"kg la lb lc kv b\">--extra-index-url<\/code><\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><code class=\"kg la lb lc kv b\">--index-url<\/code><\/p>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-18\"><p>La documentation indique :<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27400%27%20height%3D%270%27%20viewBox%3D%270%200%20400%200%27%3E%3Crect%20width%3D%27400%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-benoit6.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 400px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"400\" height=\"auto\" \/><div class=\"fusion-text fusion-text-19\"><p>Comme vous pouvez le constater, il existe une l\u00e9g\u00e8re diff\u00e9rence entre les deux et elle n'est pas \u00e9vidente \u00e0 premi\u00e8re vue. La diff\u00e9rence r\u00e9side dans le fait que si vous avez sp\u00e9cifi\u00e9 l'option\u00a0<code class=\"kg la lb lc kv b\">--index-url<\/code>\u00a0option,\u00a0<code class=\"kg la lb lc kv b\">tuyau<\/code>\u00a0n'extraira que les paquets du d\u00e9p\u00f4t dont vous avez fourni l'URL, et non des d\u00e9p\u00f4ts publics. Donc, si vous voulez \u00e9viter le comportement que nous avons d\u00e9crit plus t\u00f4t, utilisez\u00a0<code class=\"kg la lb lc kv b\">--index-url<\/code>\u00a0plut\u00f4t que\u00a0<code class=\"kg la lb lc kv b\">--extra-index-url<\/code>\u00a0et vous serez en s\u00e9curit\u00e9 !<\/p>\n<p>Enfin, pour suivre les derni\u00e8res vuln\u00e9rabilit\u00e9s d\u00e9couvertes dans vos d\u00e9pendances, vous pouvez choisir de v\u00e9rifier p\u00e9riodiquement le fichier\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/advisories?query=ecosystem%3Apip\" target=\"_blank\" rel=\"noopener ugc nofollow\">Avis GitHub database<\/a>\u00a0ou mieux, utilisez des outils tels que\u00a0<a class=\"bv ig\" href=\"https:\/\/dependabot.com\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">robot d\u00e9pendant<\/a>\u00a0qui soumettra automatiquement une pull request sur votre repo pour mettre \u00e0 jour une d\u00e9pendance dans laquelle une vuln\u00e9rabilit\u00e9 critique a \u00e9t\u00e9 r\u00e9cemment identifi\u00e9e.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">R\u00e9sum\u00e9<\/h2><\/div><div class=\"fusion-text fusion-text-20\"><p>Dans cet article, nous avons introduit le concept de cha\u00eene d'approvisionnement pour le monde du logiciel. Nous avons sp\u00e9cifiquement \u00e9tudi\u00e9 comment ce concept s'applique \u00e0 l'\u00e9cosyst\u00e8me Python. Le typo-squatting et la confusion des d\u00e9pendances ont \u00e9t\u00e9 expliqu\u00e9s et des solutions ont \u00e9t\u00e9 propos\u00e9es pour att\u00e9nuer le risque d'\u00eatre compromis.<\/p>\n<p>Cette br\u00e8ve introduction \u00e0 la s\u00e9curit\u00e9 de la cha\u00eene d'approvisionnement n'a couvert que la partie \u00e9merg\u00e9e de l'iceberg, nous n'avons pas eu l'occasion de discuter de la mani\u00e8re dont la s\u00e9curit\u00e9 de la cha\u00eene d'approvisionnement est assur\u00e9e.\u00a0<a class=\"bv ig\" href=\"https:\/\/about.codecov.io\/security-update\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">construire des syst\u00e8mes<\/a>\u00a0ou m\u00eame votre\u00a0<a class=\"bv ig\" href=\"https:\/\/snyk.io\/blog\/vulnerable-visual-studio-code-extensions-marketplace\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">IDE<\/a> peut \u00eatre compromise, mais je laisse cela pour un autre article !<\/p>\n<p>Merci d'avoir lu jusqu'ici ! Je serais heureux d'entendre vos commentaires. Si vous avez appr\u00e9ci\u00e9 cette lecture, n'h\u00e9sitez pas \u00e0 consulter notre rubrique\u00a0<a class=\"bv ig\" href=\"https:\/\/www.artefact.com\/fr\/careers\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">postes ouverts<\/a>\u00a0\u00e0 l'adresse Artefact \ud83d\ude42 .<\/p>\n<\/div><\/div><\/div><\/div><\/article><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-margin-top:40px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-top:40px;--awb-padding-right:40px;--awb-padding-bottom:40px;--awb-padding-left:40px;--awb-overflow:hidden;--awb-bg-position:left center;--awb-bg-size:cover;--awb-border-color:rgba(10,17,40,0.1);--awb-border-style:solid;--awb-border-radius:4px 4px 4px 4px;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper lazyload fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column fusion-column-has-bg-image\" data-bg-url=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/background.jpg\" data-bg=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/background.jpg\"><div class=\"fusion-image-element\" style=\"text-align:center;--awb-margin-right:20px;--awb-margin-left:20px;--awb-max-width:150px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"72\" height=\"41\" title=\"moyen\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%2772%27%20height%3D%2741%27%20viewBox%3D%270%200%2072%2041%27%3E%3Crect%20width%3D%2772%27%20height%3D%2741%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/medium.png\" alt class=\"lazyload img-responsive wp-image-60927\"\/><\/span><\/div><div class=\"fusion-title title fusion-title-7 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top:20px;--awb-margin-bottom:0px;--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Moyen Blog par Artefact.<\/h3><\/div><div class=\"fusion-text fusion-text-21\" style=\"--awb-content-alignment:center;\"><p>Cet article a \u00e9t\u00e9 initialement publi\u00e9 sur <strong>Medium.com<\/strong>.<br \/>\nSuivez-nous sur notre Medium Blog !<\/p>\n<\/div><div style=\"text-align:center;\"><a class=\"fusion-button button-flat button-medium button-default fusion-button-default button-1 fusion-button-default-span fusion-button-default-type\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/how-to-secure-your-python-software-supply-chain-81490f6e4ff9\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Lire notre article<\/span><\/a><\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>Un guide pour prendre conscience des risques auxquels vous \u00eates expos\u00e9s et quelques conseils pour vous en pr\u00e9munir.<\/p>","protected":false},"featured_media":68687,"parent":0,"template":"","meta":{"_acf_changed":false,"ep_exclude_from_search":false},"blog-category":[21939],"blog-language":[2991],"class_list":["post-64948","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-medium","blog-language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog\/64948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/media\/68687"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/media?parent=64948"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog-category?post=64948"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog-language?post=64948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}