	{"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\/es\/blog\/how-to-secure-your-python-software-supply-chain\/","title":{"rendered":"C\u00f3mo asegurar su cadena de suministro de software 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;\">Autor<\/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 ingeniero en 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>Lea nuestro art\u00edculo sobre<\/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=\"Mediano 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>Una gu\u00eda para ser consciente de los riesgos a los que se expone y algunos consejos para protegerse de ellos.<br \/>\n Recientemente ha salido a la luz un nuevo tipo de ciberamenaza: los ataques a la cadena de suministro de software. Aunque son poco frecuentes, tienen un impacto masivo y protegerse contra ellos es una preocupaci\u00f3n creciente. Debido a su variedad de casos de uso, no existe una \u00fanica regla que aplicar a sus proyectos python para estar seguro y, como siempre, depende de su contexto.<\/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;\">Introducci\u00f3n<\/h2><\/div><div class=\"fusion-text fusion-text-5\"><p>En las industrias tradicionales, una cadena de suministro es todo aquello que permite a una empresa entregar un producto al cliente. Por ejemplo, cuando usted compra un cruas\u00e1n en la panader\u00eda, todos los ingredientes, el envasado y el transporte forman parte de la cadena de suministro.<\/p>\n<\/div><div class=\"fusion-text fusion-text-6\"><p>En el \u00e1mbito del software, una cadena de suministro es cualquier cosa que afecte a su software antes de su despliegue en producci\u00f3n. Abarca todo, desde la fase de desarrollo hasta el proceso de lanzamiento, incluido el c\u00f3digo que usted escribi\u00f3, sus dependencias, su entorno de compilaci\u00f3n, su IDE, su registro de im\u00e1genes... \u00a1todos los componentes con los que interact\u00faa su software en cualquier momento!<\/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=\"art\u00edculo-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>El t\u00e9rmino \u201ccadena de suministro\u201d ha salido a la luz recientemente debido a ciberataques que tuvieron un amplio impacto. Entre todos los ataques, el de Solarwinds puede que sea el m\u00e1s famoso. De hecho, se han visto afectados el gobierno estadounidense, grandes empresas tecnol\u00f3gicas como Microsoft e Intel, pero tambi\u00e9n hospitales, compa\u00f1\u00edas el\u00e9ctricas e instituciones financieras.<\/p>\n<p>Ir\u00f3nicamente, la causa ra\u00edz es la infecci\u00f3n de Solarwinds Orion, un monitor de seguridad de red. El sistema de compilaci\u00f3n hab\u00eda sido comprometido y todas las nuevas versiones entre marzo y junio de 2020 fueron infectadas por malware. El resultado es que todos los clientes que actualizaron su software durante ese periodo se vieron comprometidos.<\/p>\n<\/div><div class=\"fusion-text fusion-text-8\"><p>Aunque el ataque de Solarwinds ha sido ampliamente cubierto por los medios de comunicaci\u00f3n, existen docenas de ataques similares de los que nunca hemos o\u00eddo hablar. Afortunadamente, la Cloud Native Computing Foundation hace un seguimiento de todos ellos en un\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/cncf\/tag-security\/tree\/main\/supply-chain-security\/compromises\" target=\"_blank\" rel=\"noopener ugc nofollow\">dep\u00f3sito p\u00fablico<\/a>. Puede que le sorprenda la aceleraci\u00f3n de estos ataques en los \u00faltimos a\u00f1os.<\/p>\n<p>Abarcar todo lo relacionado con la seguridad de la cadena de suministro no es factible en una sola entrada de blog, por lo que en este art\u00edculo nos centraremos especialmente en los proyectos que utilizan Python como lenguaje 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;\">C\u00f3mo gestionar sus dependencias en Python<\/h3><\/div><div class=\"fusion-text fusion-text-9\"><p>Aunque Python tiene una filosof\u00eda de \u201cpilas incluidas\u201d, a menudo necesita bibliotecas externas que puede descargar de PyPI, el \u00edndice oficial de paquetes, y es en este punto donde debe tener mucho cuidado.<\/p>\n<p>El ecosistema Python ya ha sido objeto de ataques, en particular mediante el uso de dos t\u00e9cnicas:<\/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\">Typo-squatting<\/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\">Confusi\u00f3n de dependencia<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-10\"><p>La primera t\u00e9cnica afecta a un comando que todo desarrollador de Python ha ejecutado al menos una vez a lo largo de su carrera:<\/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>Los piratas inform\u00e1ticos publican paquetes casi con el mismo nombre que los paquetes existentes con la esperanza de que usted cometa un error tipogr\u00e1fico e instale su paquete en lugar del paquete oficial. Por ejemplo, un paquete llamado\u00a0<code class=\"kg la lb lc kv b\">python3-dateutil<\/code>\u00a0en lugar del oficial\u00a0<code class=\"kg la lb lc kv b\">dateutil<\/code>\u00a0ha sido\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\">detectado recientemente<\/a>.<\/p>\n<p>La comunidad python es\u00a0<a class=\"bv ig\" href=\"https:\/\/lwn.net\/Articles\/834078\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">trabajando duro<\/a>\u00a0para mitigar el riesgo, pero \u00e9ste sigue siendo elevado.<\/p>\n<p>La segunda t\u00e9cnica, la confusi\u00f3n de dependencia, es m\u00e1s sofisticada que la primera y tiene que ver con c\u00f3mo\u00a0<code class=\"kg la lb lc kv b\">pip<\/code>\u00a0funciona bajo el cap\u00f3.<\/p>\n<p>Esta vez, este comando le expone al riesgo:<\/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>Cuando escriba este comando, esto es lo que ocurre:<\/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>Pongamos un ejemplo:<\/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>En este ejemplo, el paquete del hacker malicioso se instalar\u00e1 en la m\u00e1quina. De hecho, el n\u00famero de versi\u00f3n m\u00e1s alto se encuentra en el \u00edndice p\u00fablico de paquetes.<\/p>\n<p>Es posible que haya comprendido lo que puede salir mal en este proceso. Alguien con malas intenciones puede publicar paquetes en un repositorio p\u00fablico que tengan los mismos nombres que los alojados en los \u00edndices de paquetes internos y etiquetarlos con un n\u00famero de versi\u00f3n rid\u00edculamente alto. Adem\u00e1s, encontrar nombres de paquetes relevantes no es tan dif\u00edcil como\u00a0<a class=\"bv ig\" href=\"https:\/\/me&#100;&#105;&#117;&#109;&#46;&#x63;&#x6f;&#x6d;&#x2f;&#x40;&#x61;&#x6c;ex&#46;b&#105;&#114;&#115;&#97;&#110;\/dependency-confusion-4a5d60fec610\" rel=\"noopener\" target=\"_blank\">demostrado por este investigador de seguridad<\/a>.<\/p>\n<p>Este comando podr\u00eda calificarse como \u201cinseguro por dise\u00f1o\u201d. Este ataque aprovecha una caracter\u00edstica del gestor de paquetes de Python y s\u00f3lo unos pocos desarrolladores son conscientes de este comportamiento.<\/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;\">C\u00f3mo defenderse de estos ataques a la cadena de suministro<\/h3><\/div><div class=\"fusion-text fusion-text-13\"><p>Para defenderse de los ataques de typo-squatting, puede utilizar un\u00a0<strong class=\"ij lj\">archivo de bloqueo<\/strong>. A\u00a0<a class=\"bv ig\" href=\"https:\/\/www.youtube.com\/watch?v=VWWgkF-0cDQ\" target=\"_blank\" rel=\"noopener ugc nofollow\">buen archivo de bloqueo<\/a>\u00a0tiene los siguientes atributos:<\/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>Pasadores de versi\u00f3n:<\/strong>hacen que sus construcciones sean predecibles y deterministas.<\/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>Hashes:<\/strong>\u00a0son una forma de verificar la integridad del paquete.<\/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>Gr\u00e1fico de dependencia completo:<\/strong> esto le permite controlar tambi\u00e9n las dependencias de sus dependencias.<\/p>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-14\"><p>La buena noticia es que existe un paquete cuyo prop\u00f3sito es crear un archivo de bloqueo para usted:\u00a0<code class=\"kg la lb lc kv b\">pip-tools<\/code>. Con s\u00f3lo unos pocos comandos, puede generar un archivo de bloqueo con todos los atributos que hemos descrito anteriormente.<\/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 mi-env # crear un nuevo entorno virtual\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 # act\u00edvelo\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 # instale el paquete que le permitir\u00e1\ngestionar correctamente sus dependencias\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 # a\u00f1ada el paquete de\nsu elecci\u00f3n en 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 # compila requirements.txt con\nhashes bas\u00e1ndose en lo que ponga en requirements.in<\/span><\/pre>\n<\/div><div class=\"fusion-text fusion-text-16\"><p>Su archivo requirements.txt deber\u00eda tener este aspecto:<\/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>Ahora que tiene este archivo que contiene todas sus dependencias con sus versiones y hashes asociados, puede ejecutar el siguiente comando la pr\u00f3xima vez que despliegue:<\/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 requisitos.txt<\/span><\/pre>\n<p>As\u00ed, estar\u00e1 seguro de que los paquetes que utiliza en producci\u00f3n no han sido alterados. Suponiendo que haya tenido cuidado al escribir su\u00a0<code class=\"kg la lb lc kv b\">requisitos.en<\/code>\u00a0archivo \ud83d\udc40, tambi\u00e9n puede estar seguro de que descargar\u00e1 el paquete que realmente desea, ya que todo est\u00e1 automatizado. \u00a1Sin riesgo de error tipogr\u00e1fico!<\/p>\n<p>Esta pr\u00e1ctica recomendada es buena para defenderse de los ataques de \"typo-squatting\", pero \u00bfqu\u00e9 ocurre con la confusi\u00f3n de dependencias?<\/p>\n<p>Si se fija en el\u00a0<code class=\"kg la lb lc kv b\">pip<\/code>\u00a0ver\u00e1 que hay dos opciones que puede utilizar para descargar paquetes de un repositorio interno:<\/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 documentaci\u00f3n dice:<\/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>Como puede ver, hay una ligera diferencia entre ambos y no es evidente a primera vista. La diferencia es que si especifica el\u00a0<code class=\"kg la lb lc kv b\">--index-url<\/code>\u00a0opci\u00f3n,\u00a0<code class=\"kg la lb lc kv b\">pip<\/code>\u00a0s\u00f3lo extraer\u00eda paquetes del repositorio con la URL que usted proporcion\u00f3, y no de repositorios p\u00fablicos. As\u00ed que, si quiere evitar el comportamiento que hemos descrito antes, utilice\u00a0<code class=\"kg la lb lc kv b\">--index-url<\/code>\u00a0en lugar de\u00a0<code class=\"kg la lb lc kv b\">--extra-index-url<\/code>\u00a0\u00a1y estar\u00e1 a salvo!<\/p>\n<p>Por \u00faltimo, para seguir las \u00faltimas vulnerabilidades que se descubran en sus dependencias, puede optar por comprobar peri\u00f3dicamente el archivo\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/advisories?query=ecosystem%3Apip\" target=\"_blank\" rel=\"noopener ugc nofollow\">GitHub asesor database<\/a>\u00a0o mejor, aproveche herramientas como\u00a0<a class=\"bv ig\" href=\"https:\/\/dependabot.com\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">dependabot<\/a>\u00a0que enviar\u00e1 autom\u00e1ticamente un pull request en su repo para actualizar una dependencia en la que se haya identificado recientemente una vulnerabilidad cr\u00edtica.<\/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;\">Resumen<\/h2><\/div><div class=\"fusion-text fusion-text-20\"><p>En este art\u00edculo, introdujimos el concepto de cadena de suministro para el mundo del software. En concreto, hemos estudiado c\u00f3mo se aplica este concepto al ecosistema Python. Se han explicado el typo-squatting y la confusi\u00f3n de dependencias y se han propuesto soluciones para mitigar el riesgo de verse comprometido.<\/p>\n<p>Esta r\u00e1pida introducci\u00f3n a la seguridad de la cadena de suministro s\u00f3lo ha cubierto la punta del iceberg, no hemos tenido la oportunidad de hablar de c\u00f3mo\u00a0<a class=\"bv ig\" href=\"https:\/\/about.codecov.io\/security-update\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">construir sistemas<\/a>\u00a0o incluso su\u00a0<a class=\"bv ig\" href=\"https:\/\/snyk.io\/blog\/vulnerable-visual-studio-code-extensions-marketplace\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">IDEs<\/a> puede verse comprometida, \u00a1pero eso lo dejo para otro art\u00edculo!<\/p>\n<p>Gracias por leer hasta aqu\u00ed. Estar\u00e9 encantada de escuchar sus comentarios. Si le ha gustado la lectura, no dude en consultar nuestro\u00a0<a class=\"bv ig\" href=\"https:\/\/www.artefact.com\/es\/careers\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">puestos vacantes<\/a>\u00a0en 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=\"medio\" 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;\">Medio Blog por Artefact.<\/h3><\/div><div class=\"fusion-text fusion-text-21\" style=\"--awb-content-alignment:center;\"><p>Este art\u00edculo se public\u00f3 inicialmente en <strong>Medium.com<\/strong>.<br \/>\n\u00a1S\u00edganos en nuestro 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\">Lea nuestro art\u00edculo<\/span><\/a><\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>Una gu\u00eda para ser consciente de los riesgos a los que se expone y algunos consejos para protegerse de ellos.<\/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\/es\/wp-json\/wp\/v2\/blog\/64948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/media\/68687"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/media?parent=64948"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/blog-category?post=64948"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/es\/wp-json\/wp\/v2\/blog-language?post=64948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}