From 113e4e3deced767c9c8493c58205bb0f59891b39 Mon Sep 17 00:00:00 2001 From: Shreya Porwal <111834212+porwalshreyaa@users.noreply.github.com> Date: Sat, 7 Oct 2023 20:34:18 +0530 Subject: [PATCH 01/16] Update Resources.md --- Resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources.md b/Resources.md index a0b4176..eff931f 100644 --- a/Resources.md +++ b/Resources.md @@ -4,7 +4,7 @@ Day-01 - [https://www.youtube.com/watch?v=Xrgk023l4lI](https://www.youtube.com/watch?v=Xrgk023l4lI) DevOps in 5 Minutes - [https://www.youtube.com/watch?v=\_Gpe1Zn-1f&t=43s](https://www.youtube.com/watch?v=_Gpe1Zn-1fE&t=43s&ab_channel=HiteshChoudhary) What is DevOps? Easy Way -- [https://www.youtube.com/watch?v=7l_n97Mt0ko](tv) DevOps roadmap 2022 | Success Roadmap 2022 +- [https://www.youtube.com/watch?v=7l_n97Mt0ko](https://www.youtube.com/watch?v=7l_n97Mt0ko&t=16s) DevOps roadmap 2022 | Success Roadmap 2022 Day-02 From a89303d47cbfc53eeb2302f29d77f3ecfd5e0246 Mon Sep 17 00:00:00 2001 From: "yuri.ji" Date: Tue, 17 Oct 2023 23:01:30 +0900 Subject: [PATCH 02/16] Translate day14-20 into korean --- 2023/ko/days/day14.md | 279 ++++++++++++++++++++++++++++++++++++++++++ 2023/ko/days/day15.md | 235 +++++++++++++++++++++++++++++++++++ 2023/ko/days/day16.md | 94 ++++++++++++++ 2023/ko/days/day17.md | 247 +++++++++++++++++++++++++++++++++++++ 2023/ko/days/day18.md | 40 ++++++ 2023/ko/days/day19.md | 48 ++++++++ 2023/ko/days/day20.md | 155 +++++++++++++++++++++++ 7 files changed, 1098 insertions(+) create mode 100644 2023/ko/days/day14.md create mode 100644 2023/ko/days/day15.md create mode 100644 2023/ko/days/day16.md create mode 100644 2023/ko/days/day17.md create mode 100644 2023/ko/days/day18.md create mode 100644 2023/ko/days/day19.md create mode 100644 2023/ko/days/day20.md diff --git a/2023/ko/days/day14.md b/2023/ko/days/day14.md new file mode 100644 index 0000000..846d3da --- /dev/null +++ b/2023/ko/days/day14.md @@ -0,0 +1,279 @@ +# 컨테이너 이미지 스캐닝 + +컨테이너 이미지는 이미지 매니페스트, 파일 시스템 및 이미지 구성으로 구성됩니다. [1](https://opencontainers.org/about/overview/) + +예를 들어, Java 애플리케이션용 컨테이너 이미지의 파일 시스템에는 Linux 파일 시스템, JVM 및 애플리케이션을 나타내는 JAR/WAR 파일이 있습니다. + +컨테이너를 사용하는 경우 CI/CD 파이프라인의 중요한 부분은 이러한 컨테이너에 알려진 취약성이 있는지 스캐닝하는 프로세스여야 합니다. +이를 통해 컨테이너 내부에 있는 취약성의 수에 대한 귀중한 정보를 얻을 수 있으며, 취약한 애플리케이션을 운영 환경에 배포하고 이러한 취약성으로 인해 해킹되는 것을 방지할 수 있습니다. + +2021년 말 발견된 [Log4Shell](https://en.wikipedia.org/wiki/Log4Shell) 취약성을 예로 들어보겠습니다. +너무 자세히 설명하지 않아도 응용프로그램에 이 취약성이 있다는 것은 공격자가 서버에서 임의 코드를 실행할 수 있다는 것을 의미합니다. +이 취약성은 가장 인기 있는 Java 라이브러리 중 하나인 [Log4j](https://logging.apache.org/log4j/2.x/) 에 있기 때문에 더욱 악화되었습니다. +꽤나 나쁘네요! + +그렇다면 우리가 취약한지 어떻게 알 수 있을까요? + +정답은 **Image Scanning**입니다. + +이미지 스캐닝 프로세스는 컨테이너 내부를 살펴보고, 설치된 패키지 목록(리눅스 패키지일 수도 있지만 자바, Go, 자바스크립트 패키지 등일 수도 있음)을 가져오고, 패키지 목록을 각 패키지에 대해 알려진 취약성 데이터베이스와 교차 참조하고, 최종적으로 지정된 컨테이너 이미지에 대한 취약성 목록을 생성하는 것으로 구성됩니다. + +컴퓨터 로컬이나 CI/CD 파이프라인에서 컨테이너 이미지를 바로 설치하고 스캔을 시작할 수 있는 오픈 소스 및 독점 이미지 스캐너가 많이 있습니다. +가장 인기 있는 두 가지는 [Triby](https://github.com/aquasecurity/trivy) 와 [Grype](https://github.com/anchore/grype) 입니다. +일부 독점 제품은 [Snyk](https://docs.snyk.io/products/snyk-container/snyk-cli-for-container-security) (계정 필요, Free tier 있음) 및 [VMware Carbon Black](https://carbonblack.vmware.com/resource/carbon-black-cloud-container-security-faq#overview) (계정 필요, Free tier 없음)입니다. + +컨테이너 이미지를 스캔하는 것은 다음 중 하나를 설치하고 실행하는 것처럼 간단합니다: + +```console +$ grype ubuntu:latest + ✔ Vulnerability DB [updated] + ✔ Pulled image + ✔ Loaded image + ✔ Parsed image + ✔ Cataloged packages [101 packages] + ✔ Scanned image [16 vulnerabilities] +NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY +bash 5.1-6ubuntu1 deb CVE-2022-3715 Medium +coreutils 8.32-4.1ubuntu1 deb CVE-2016-2781 Low +gpgv 2.2.27-3ubuntu2.1 deb CVE-2022-3219 Low +libc-bin 2.35-0ubuntu3.1 deb CVE-2016-20013 Negligible +libc6 2.35-0ubuntu3.1 deb CVE-2016-20013 Negligible +libncurses6 6.3-2 deb CVE-2022-29458 Negligible +libncursesw6 6.3-2 deb CVE-2022-29458 Negligible +libpcre3 2:8.39-13ubuntu0.22.04.1 deb CVE-2017-11164 Negligible +libsystemd0 249.11-0ubuntu3.6 deb CVE-2022-3821 Medium +libtinfo6 6.3-2 deb CVE-2022-29458 Negligible +libudev1 249.11-0ubuntu3.6 deb CVE-2022-3821 Medium +login 1:4.8.1-2ubuntu2 deb CVE-2013-4235 Low +ncurses-base 6.3-2 deb CVE-2022-29458 Negligible +ncurses-bin 6.3-2 deb CVE-2022-29458 Negligible +passwd 1:4.8.1-2ubuntu2 deb CVE-2013-4235 Low +zlib1g 1:1.2.11.dfsg-2ubuntu9.2 deb CVE-2022-42800 Medium +``` + +이 명령을 사용하여 `ubuntu:latest` 컨테이너 이미지를 스캔한 결과 16개의 취약점이 있는 것으로 나타났습니다. + +각 취약성에는 [CVSS](https://nvd.nist.gov/vuln-metrics/cvss) 점수에 따라 심각도가 있습니다. +심각도는 '낮음'부터 '심각함'까지 다양합니다. + +16개의 취약점은 많아 보이지만, 어느 것도 '크리티컬(Critical)'한 심각성을 가지고 있지 않습니다. + +또한 결과 테이블의 'FIXED-IN' 열이 비어 있습니다. +이는 해당 패키지의 최신 버전에서 이 취약성이 수정되지 않음을 의미합니다. + +`ubuntu:latest`는 Ubuntu의 공식 컨테이너 이미지의 최신 버전이기 때문에 이는 예상됩니다. +일반적으로 이러한 이미지는 정기적으로 업데이트되므로 이러한 이미지에 많은 취약점이 있을 것으로 예상해서는 안 됩니다.(적어도 사용 가능한 수정 사항이 있는 이미지는 아님). + +오래된 이미지, 임의의 이미지, 대기업에서 지원하지 않는 이미지 또는 자신이 관리하지 않는 이미지의 경우에는 그렇지 않을 수 있습니다. + +예를 들어, Docker Hub의 `springio` 조직에서 임의 이미지 2년 된 이미지를 스캔하면 훨씬 더 많은 취약점이 잠재해 있음을 알 수 있습니다: + +```console +$ grype springio/petclinic:latest + ✔ Vulnerability DB [no update available] + ✔ Pulled image + ✔ Loaded image + ✔ Parsed image + ✔ Cataloged packages [213 packages] + ✔ Scanned image [167 vulnerabilities] +NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY +bash 4.4.18-2ubuntu1.2 deb CVE-2022-3715 Medium +bash 4.4.18-2ubuntu1.2 4.4.18-2ubuntu1.3 deb CVE-2019-18276 Low +coreutils 8.28-1ubuntu1 deb CVE-2016-2781 Low +dpkg 1.19.0.5ubuntu2.3 1.19.0.5ubuntu2.4 deb CVE-2022-1664 Medium +e2fsprogs 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium +gcc-8-base 8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium +gpgv 2.2.4-1ubuntu1.4 2.2.4-1ubuntu1.6 deb CVE-2022-34903 Medium +gpgv 2.2.4-1ubuntu1.4 2.2.4-1ubuntu1.5 deb CVE-2019-13050 Low +gpgv 2.2.4-1ubuntu1.4 deb CVE-2022-3219 Low +gzip 1.6-5ubuntu1 1.6-5ubuntu1.2 deb CVE-2022-1271 Medium +h2 1.4.200 2.0.202 java-archive GHSA-7rpj-hg47-cx62 High +h2 1.4.200 2.0.206 java-archive GHSA-h376-j262-vhq6 Critical +h2 1.4.200 java-archive CVE-2021-23463 Critical +h2 1.4.200 java-archive CVE-2021-42392 Critical +h2 1.4.200 java-archive CVE-2022-23221 Critical +h2 1.4.200 2.1.210 java-archive GHSA-45hx-wfhj-473x Critical +jackson-databind 2.11.4 2.12.7.1 java-archive GHSA-jjjh-jjxp-wpff High +jackson-databind 2.11.4 2.12.7.1 java-archive GHSA-rgv9-q543-rqg4 High +jackson-databind 2.11.4 java-archive CVE-2022-42004 High +jackson-databind 2.11.4 java-archive CVE-2020-36518 High +jackson-databind 2.11.4 java-archive CVE-2022-42003 High +jackson-databind 2.11.4 2.12.6.1 java-archive GHSA-57j2-w4cx-62h2 High +jquery 2.2.4 java-archive CVE-2019-11358 Medium +jquery 2.2.4 java-archive CVE-2020-11022 Medium +jquery 2.2.4 java-archive CVE-2015-9251 Medium +jquery 2.2.4 java-archive CVE-2020-11023 Medium +jquery 2.2.4 java-archive CVE-2007-2379 Medium +jquery-ui 1.11.4 java-archive CVE-2021-41184 Medium +jquery-ui 1.11.4 java-archive CVE-2016-7103 Medium +jquery-ui 1.11.4 java-archive CVE-2021-41182 Medium +jquery-ui 1.11.4 java-archive CVE-2021-41183 Medium +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low +libc-bin 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low +libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low +libc-bin 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible +libc-bin 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible +libc6 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible +libc6 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible +libc6 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low +libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low +libcom-err2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium +libext2fs2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium +libgcc1 1:8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium +libgcrypt20 1.8.1-4ubuntu1.2 1.8.1-4ubuntu1.3 deb CVE-2021-40528 Medium +libgcrypt20 1.8.1-4ubuntu1.2 1.8.1-4ubuntu1.3 deb CVE-2021-33560 Low +libgmp10 2:6.1.2+dfsg-2 2:6.1.2+dfsg-2ubuntu0.1 deb CVE-2021-43618 Low +libgnutls30 3.5.18-1ubuntu1.4 3.5.18-1ubuntu1.6 deb CVE-2021-4209 Low +libgnutls30 3.5.18-1ubuntu1.4 deb CVE-2018-16868 Low +libgnutls30 3.5.18-1ubuntu1.4 3.5.18-1ubuntu1.6 deb CVE-2022-2509 Medium +libhogweed4 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2021-3580 Medium +libhogweed4 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2018-16869 Low +liblz4-1 0.0~r131-2ubuntu3 0.0~r131-2ubuntu3.1 deb CVE-2021-3520 Medium +liblzma5 5.2.2-1.3 5.2.2-1.3ubuntu0.1 deb CVE-2022-1271 Medium +libncurses5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible +libncurses5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible +libncurses5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible +libncurses5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible +libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible +libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible +libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible +libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible +libnettle6 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2021-3580 Medium +libnettle6 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2018-16869 Low +libpcre3 2:8.39-9 deb CVE-2017-11164 Negligible +libpcre3 2:8.39-9 2:8.39-9ubuntu0.1 deb CVE-2020-14155 Negligible +libpcre3 2:8.39-9 2:8.39-9ubuntu0.1 deb CVE-2019-20838 Low +libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36086 Low +libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36085 Low +libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36087 Low +libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36084 Low +libss2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.15 deb CVE-2022-0778 High +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.20 deb CVE-2022-2097 Medium +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3712 Medium +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3711 High +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.17 deb CVE-2022-1292 Medium +libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.19 deb CVE-2022-2068 Medium +libstdc++6 8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium +libsystemd0 237-3ubuntu10.47 237-3ubuntu10.56 deb CVE-2022-2526 Medium +libsystemd0 237-3ubuntu10.47 deb CVE-2022-3821 Medium +libsystemd0 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2020-13529 Low +libsystemd0 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2021-33910 High +libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible +libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible +libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible +libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible +libudev1 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2020-13529 Low +libudev1 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2021-33910 High +libudev1 237-3ubuntu10.47 deb CVE-2022-3821 Medium +libudev1 237-3ubuntu10.47 237-3ubuntu10.56 deb CVE-2022-2526 Medium +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low +locales 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low +locales 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low +locales 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low +locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low +log4j-api 2.13.3 java-archive CVE-2021-45105 Medium +log4j-api 2.13.3 java-archive CVE-2021-44832 Medium +log4j-to-slf4j 2.13.3 java-archive CVE-2021-44832 Medium +log4j-to-slf4j 2.13.3 java-archive CVE-2021-45105 Medium +logback-core 1.2.3 1.2.9 java-archive GHSA-668q-qrv7-99fm Medium +login 1:4.5-1ubuntu2 deb CVE-2013-4235 Low +login 1:4.5-1ubuntu2 1:4.5-1ubuntu2.2 deb CVE-2018-7169 Low +ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible +ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible +ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible +ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible +ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible +ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible +ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible +ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3712 Medium +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.19 deb CVE-2022-2068 Medium +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.20 deb CVE-2022-2097 Medium +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3711 High +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.15 deb CVE-2022-0778 High +openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.17 deb CVE-2022-1292 Medium +passwd 1:4.5-1ubuntu2 1:4.5-1ubuntu2.2 deb CVE-2018-7169 Low +passwd 1:4.5-1ubuntu2 deb CVE-2013-4235 Low +perl-base 5.26.1-6ubuntu0.5 5.26.1-6ubuntu0.6 deb CVE-2020-16156 Medium +snakeyaml 1.27 java-archive GHSA-w37g-rhq8-7m4j Medium +snakeyaml 1.27 1.32 java-archive GHSA-9w3m-gqgf-c4p9 Medium +snakeyaml 1.27 1.31 java-archive GHSA-3mc7-4q67-w48m High +snakeyaml 1.27 1.31 java-archive GHSA-c4r9-r8fh-9vj2 Medium +snakeyaml 1.27 1.31 java-archive GHSA-hhhw-99gj-p3c3 Medium +snakeyaml 1.27 1.31 java-archive GHSA-98wm-3w3q-mw94 Medium +spring-core 5.3.6 java-archive CVE-2022-22950 Medium +spring-core 5.3.6 java-archive CVE-2022-22965 Critical +spring-core 5.3.6 java-archive CVE-2021-22096 Medium +spring-core 5.3.6 java-archive CVE-2022-22968 Medium +spring-core 5.3.6 java-archive CVE-2022-22970 Medium +spring-core 5.3.6 java-archive CVE-2022-22971 Medium +spring-core 5.3.6 java-archive CVE-2021-22118 High +spring-core 5.3.6 java-archive CVE-2016-1000027 Critical +spring-core 5.3.6 java-archive CVE-2021-22060 Medium +tar 1.29b-2ubuntu0.2 1.29b-2ubuntu0.3 deb CVE-2021-20193 Low +zlib1g 1:1.2.11.dfsg-0ubuntu2 1:1.2.11.dfsg-0ubuntu2.2 deb CVE-2022-37434 Medium +zlib1g 1:1.2.11.dfsg-0ubuntu2 1:1.2.11.dfsg-0ubuntu2.1 deb CVE-2018-25032 Medium +zlib1g 1:1.2.11.dfsg-0ubuntu2 deb CVE-2022-42800 Medium +``` + +여기서 우리는 훨씬 더 많은 `중요한` 취약점을 볼 수 있을 뿐만 아니라 많은 취약점이 해당 종속성의 최신 버전에서 수정되었음을 알 수 있습니다. +즉, 해당 종속성의 간단한 버전 업데이트만으로도 취약점을 제거하고 이미지를 더 안전하게 만들 수 있습니다. + +물론 항상 그렇게 간단한 것은 아닙니다. +때로는 종속성의 새 버전에 소스 코드를 변경해야 하는 API 변경 사항이 포함되거나, 종속성과 상호 작용하는 방식에 버그를 유발하는 동작 변경이 포함되거나, 수정될 때까지 피하고 싶은 버그가 발생할 수 있습니다. + +또 한 가지 언급할 만한 점은 이러한 유형의 스캔은 _알려진_ 취약점만 탐지한다는 것입니다. +즉, 보안 연구원이 발견하고 CVE를 지정한 취약점만 탐지합니다. +아직 알려지지 않은 취약점이 코드/종속성에 숨어 있을 수 있습니다. (Log4Shell은 2013년부터 사용되었지만 2021년에야 발견됨) + +요약하자면, 이미지 스캔은 만병통치약이 아닙니다. +이미지 스캐너가 이미지에 취약점이 0개라고 알려준다고 해서 100% 안전하다는 의미는 아닙니다. + +또한 취약점을 완화하는 것은 종속성 버전을 변경하거나 다운그레이드하는 것만큼 간단할 수도 있지만, 때로는 버전 변경을 위해 코드를 변경해야 할 수도 있기 때문에 더 까다로울 수 있습니다. + +## CVEs + +스캐너가 제공하는 취약점 표에서 'CVE-'로 시작하는 것을 볼 수 있습니다: + +```text +bash 4.4.18-2ubuntu1.2 deb CVE-2022-3715 Medium +``` + +[CVE**](https://cve.mitre.org/)는 **C**ommon **V**ulnerability and **E**xposures.의 약자입니다. + +취약점을 추적하고 쉽게 검색할 수 있도록 하는 시스템입니다. + +새로운 취약점이 발견될 때마다 [CNA](https://www.cve.org/ProgramOrganization/CNAs)(CVE 번호 부여 기관)에서 CVE를 할당하고 해당 취약점이 포함된 모든 구성 요소와 연관시킵니다. + +이 작업이 완료되면 이 정보는 취약점 데이터베이스로 전파되며 이미지 스캐너를 통해 컨테이너에 존재하는 CVE/취약점에 대해 경고하는 데 활용될 수 있습니다. + +## 요약 + +이제 이미지 스캔이 중요한 이유와 보안을 강화하는 데 어떻게 도움이 되는지 알게 되었습니다. +[15일차](day15.md)에서는 이미지 스캐너가 내부에서 작동하는 방식에 대해 자세히 살펴보고 SBOM과 취약성 데이터베이스 등을 살펴보겠습니다. diff --git a/2023/ko/days/day15.md b/2023/ko/days/day15.md new file mode 100644 index 0000000..d03d304 --- /dev/null +++ b/2023/ko/days/day15.md @@ -0,0 +1,235 @@ +# 컨테이너 이미지 스캐닝 고급 + +## SBOM + +**SBOM**은 **S**oftware **B**ill **O**f **M**aterials의 약자입니다. + +이것은 소프트웨어 애플리케이션 또는 시스템을 구성하는 모든 구성 요소의 목록입니다. +여기에는 소프트웨어를 구축하는 데 사용되는 다양한 타사 라이브러리, 프레임워크 및 기타 오픈 소스 또는 독점 구성 요소에 대한 정보가 포함됩니다. +또한 SBOM에는 이러한 구성 요소의 버전, 라이선스 정보, 알려진 취약점 또는 보안 문제에 대한 세부 정보도 포함될 수 있습니다. + +SBOM의 목적은 이러한 구성 요소를 나열하여 소프트웨어 사용자에게 소프트웨어 제품에 포함된 구성 요소에 대한 가시성을 제공하고 보안 또는 법적 이유로 유해할 수 있는 구성 요소를 피할 수 있도록 하는 것입니다. + +[올해](https://www.immuniweb.com/blog/5-biggest-supply-chain-attacks-in-2022-so-far.html) 와 [작년](https://cyolo.io/blog/top-5-supply-chain-attacks-of-2021/) 지난 몇 년간 대규모 공급망 공격이 발생한 후 SBOM의 사용이 더욱 보편화되었습니다. + + +컨테이너 이미지의 컨텍스트에서, 컨테이너 이미지에 대한 SBOM에는 다음이 포함됩니다: + +- 컨테이너에 설치된 리눅스 패키지 및 라이브러리 +- 컨테이너에서 실행 중인 애플리케이션을 위해 설치된 언어별 패키지(예: Python 패키지, Go 패키지 등) + +컨테이너 이미지에서 SBOM을 추출하는 데 도움이 되는 도구가 있습니다. + +그러한 도구 중 하나는 [syft](https://github.com/anchore/syft)입니다. + +예를 들어, syft를 사용하여 `ubuntu:latest` 컨테이너 이미지에 대한 SBOM을 생성할 수 있습니다: + +```console +$ syft ubuntu + ✔ Parsed image + ✔ Cataloged packages [101 packages] +NAME VERSION TYPE +adduser 3.118ubuntu5 deb +apt 2.4.8 deb +base-files 12ubuntu4.2 deb +base-passwd 3.5.52build1 deb +bash 5.1-6ubuntu1 deb +bsdutils 1:2.37.2-4ubuntu3 deb +coreutils 8.32-4.1ubuntu1 deb +dash 0.5.11+git20210903+057cd650a4ed-3build1 deb +debconf 1.5.79ubuntu1 deb +debianutils 5.5-1ubuntu2 deb +diffutils 1:3.8-0ubuntu2 deb +dpkg 1.21.1ubuntu2.1 deb +e2fsprogs 1.46.5-2ubuntu1.1 deb +findutils 4.8.0-1ubuntu3 deb +gcc-12-base 12.1.0-2ubuntu1~22.04 deb +gpgv 2.2.27-3ubuntu2.1 deb +grep 3.7-1build1 deb +gzip 1.10-4ubuntu4.1 deb +hostname 3.23ubuntu2 deb +init-system-helpers 1.62 deb +libacl1 2.3.1-1 deb +libapt-pkg6.0 2.4.8 deb +libattr1 1:2.5.1-1build1 deb +libaudit-common 1:3.0.7-1build1 deb +libaudit1 1:3.0.7-1build1 deb +libblkid1 2.37.2-4ubuntu3 deb +libbz2-1.0 1.0.8-5build1 deb +libc-bin 2.35-0ubuntu3.1 deb +libc6 2.35-0ubuntu3.1 deb +libcap-ng0 0.7.9-2.2build3 deb +libcap2 1:2.44-1build3 deb +libcom-err2 1.46.5-2ubuntu1.1 deb +libcrypt1 1:4.4.27-1 deb +libdb5.3 5.3.28+dfsg1-0.8ubuntu3 deb +libdebconfclient0 0.261ubuntu1 deb +libext2fs2 1.46.5-2ubuntu1.1 deb +libffi8 3.4.2-4 deb +libgcc-s1 12.1.0-2ubuntu1~22.04 deb +libgcrypt20 1.9.4-3ubuntu3 deb +libgmp10 2:6.2.1+dfsg-3ubuntu1 deb +libgnutls30 3.7.3-4ubuntu1.1 deb +libgpg-error0 1.43-3 deb +libgssapi-krb5-2 1.19.2-2 deb +libhogweed6 3.7.3-1build2 deb +libidn2-0 2.3.2-2build1 deb +libk5crypto3 1.19.2-2 deb +libkeyutils1 1.6.1-2ubuntu3 deb +libkrb5-3 1.19.2-2 deb +libkrb5support0 1.19.2-2 deb +liblz4-1 1.9.3-2build2 deb +liblzma5 5.2.5-2ubuntu1 deb +libmount1 2.37.2-4ubuntu3 deb +libncurses6 6.3-2 deb +libncursesw6 6.3-2 deb +libnettle8 3.7.3-1build2 deb +libnsl2 1.3.0-2build2 deb +libp11-kit0 0.24.0-6build1 deb +libpam-modules 1.4.0-11ubuntu2 deb +libpam-modules-bin 1.4.0-11ubuntu2 deb +libpam-runtime 1.4.0-11ubuntu2 deb +libpam0g 1.4.0-11ubuntu2 deb +libpcre2-8-0 10.39-3ubuntu0.1 deb +libpcre3 2:8.39-13ubuntu0.22.04.1 deb +libprocps8 2:3.3.17-6ubuntu2 deb +libseccomp2 2.5.3-2ubuntu2 deb +libselinux1 3.3-1build2 deb +libsemanage-common 3.3-1build2 deb +libsemanage2 3.3-1build2 deb +libsepol2 3.3-1build1 deb +libsmartcols1 2.37.2-4ubuntu3 deb +libss2 1.46.5-2ubuntu1.1 deb +libssl3 3.0.2-0ubuntu1.7 deb +libstdc++6 12.1.0-2ubuntu1~22.04 deb +libsystemd0 249.11-0ubuntu3.6 deb +libtasn1-6 4.18.0-4build1 deb +libtinfo6 6.3-2 deb +libtirpc-common 1.3.2-2ubuntu0.1 deb +libtirpc3 1.3.2-2ubuntu0.1 deb +libudev1 249.11-0ubuntu3.6 deb +libunistring2 1.0-1 deb +libuuid1 2.37.2-4ubuntu3 deb +libxxhash0 0.8.1-1 deb +libzstd1 1.4.8+dfsg-3build1 deb +login 1:4.8.1-2ubuntu2 deb +logsave 1.46.5-2ubuntu1.1 deb +lsb-base 11.1.0ubuntu4 deb +mawk 1.3.4.20200120-3 deb +mount 2.37.2-4ubuntu3 deb +ncurses-base 6.3-2 deb +ncurses-bin 6.3-2 deb +passwd 1:4.8.1-2ubuntu2 deb +perl-base 5.34.0-3ubuntu1.1 deb +procps 2:3.3.17-6ubuntu2 deb +sed 4.8-1ubuntu2 deb +sensible-utils 0.0.17 deb +sysvinit-utils 3.01-1ubuntu1 deb +tar 1.34+dfsg-1build3 deb +ubuntu-keyring 2021.03.26 deb +usrmerge 25ubuntu2 deb +util-linux 2.37.2-4ubuntu3 deb +zlib1g 1:1.2.11.dfsg-2ubuntu9.2 deb +``` + +SBOM에는 컨테이너 이미지 내부에 설치된 패키지와 라이브러리가 포함되어 있을 뿐만 아니라, +유형과 버전도 나열되어 있습니다. +이제 이 목록을 취약점 데이터베이스와 상호 참조하여 컨테이너 내부에 취약점이 있는지 확인할 수 있습니다. + +그렇다면 **취약점 데이터베이스(Vulnerability Database)**란 무엇인가요? + +## 취약점 데이터베이스 + +취약점 데이터베이스는 소프트웨어, 하드웨어 및 기타 시스템의 알려진 취약점에 대한 정보 모음입니다. +일반적으로 취약점의 유형, 취약점의 심각도, 취약점의 잠재적 영향과 같은 취약점의 특성에 대한 세부 정보가 포함됩니다. +취약점 데이터베이스에는 취약점이 악용될 수 있는 방법과 해당 취약점에 대해 사용 가능한 패치 또는 수정 사항에 대한 정보도 포함될 수 있습니다. + +일부 취약점 데이터베이스는 [vuldb.com](https://vuldb.com/), [NIST](https://nvd.nist.gov/vuln), [cvedetails.com](https://www.cvedetails.com/) 및 [Snyk 취약점 데이터베이스](https://security.snyk.io/) 등이 있습니다. + +이들 기관은 사용자가 다운로드할 수 있는 API 또는 원시 데이터를 제공하며, SBOM의 패키지와 취약점 정보를 상호 참조할 수 있습니다. +이렇게 하면 패키지에 주의해야 할 취약점이 있는지 확인할 수 있습니다. + +일반적으로 이 취약점이 도입된 라이브러리 버전과 최신 버전에서 취약점이 수정되었는지 여부에 대한 정보도 찾을 수 있습니다. +이 정보를 사용하여 취약점을 완화하기 위해 종속성을 업데이트/다운그레이드할지 여부를 결정할 수 있습니다. +14일차](./day14.md)에서 이미 설명했듯이, 종속성 업데이트에는 동작 또는 API 변경이 수반되는 경우가 있기 때문에 종속성을 업데이트하는 것이 항상 간단한 것은 아닙니다. + +취약점에 대한 또 다른 중요한 정보는 취약점의 **CVSS 점수**입니다. + +## CVSS + +## CVSS + +**CVSS**는 **C**ommon **V**ulnerability **S**coring **S**ystem의 약자입니다. + +이 시스템은 취약점의 주요 특성을 파악하고 그 심각성을 반영하는 수치 점수를 생성하는 방법을 제공합니다. +그런 다음 이 수치 점수를 정성적 표현(낮음, 중간, 높음, 심각 등)으로 변환하여 조직이 취약점 관리 프로세스를 적절히 평가하고 우선순위를 정할 수 있도록 도와줍니다. + +기본적으로 하나의 취약점이 다른 취약점보다 더 심각할 수 있습니다. +익스플로잇이 얼마나 쉬운지, 얼마나 큰 피해를 입힐 수 있는지에 따라 취약점의 순위를 객관적으로 매길 수 있는 시스템이 필요합니다. + +이것이 바로 CVSS가 필요한 이유입니다. + +CVSS v3는 CVSS 점수를 계산하는 8가지 기준을 정의합니다. +이러한 기준은 다음과 같습니다: + +### 공격 벡터 Attack Vector + +취약점 악용이 가능한 컨텍스트를 반영합니다. + +가능한 값 : **Network(N)**, **Adjacent(A)**, **Local(L)**, **Physical(P)** + +### 공격 복잡성 Attack Complexity + +취약점을 익스플로잇하기 위해 공격자가 통제할 수 없는 조건에 대해 설명합니다. + +가능한 값 : **Low(L)**, **High(H)** + +### 필요한 권한 Priviledges Required + +공격자가 취약점을 성공적으로 익스플로잇하기 전에 보유해야 하는 권한 수준을 설명합니다. + +가능한 값 : **None(N)**, **Low(L)**, **High(H)** + +### 사용자 상호작용 User Interaction + +공격자 이외의 사용자가 취약한 구성 요소의 성공적인 침해에 참여하기 위한 요구 사항입니다. + +가능한 값 : **None(N)**, **Required(R)** + +#### 범위 Scope + +한 소프트웨어 구성 요소의 취약점이 리소스 또는 권한에 영향을 미칠 수 있는 능력입니다. + +가능한 값 : **Unchanged(U)**, **Changed(C)** + +### 기밀성 Confidentiality + +성공적으로 익스플로잇된 취약점으로 인해 소프트웨어 구성 요소가 관리하는 정보 리소스의 기밀성에 미치는 영향입니다. + +가능한 값 : **None(N)**, **Low(L)**, **High(H)** + +### 무결성 Integrity + +성공적으로 익스플로잇된 취약점이 무결성에 미치는 영향입니다. + +가능한 값 : **None(N)**, **Low(L)**, **High(H)** + +### 가용성 Availability + +성공적으로 익스플로잇된 취약점으로 인해 영향을 받은 구성 요소의 가용성에 미치는 영향입니다. + +가능한 값 : **None(N)**, **Low(L)**, **High(H)** + +이 8가지 벡터의 조합에 따라 CVSS 점수가 결정됩니다. +0에서 10 사이입니다. +0이 가장 낮고 10이 가장 높습니다.(가장 위험) +[이 곳](https://www.first.org/cvss/calculator/3.0)에서 각 취약점의 점수를 계산할 수 있는 CVSS 계산기를 찾을 수 있습니다. + +## 리소스 + + + + + + +[16일차](day16.md)에서는 "Fuzzing" 또는 Fuzz Test에 대해 살펴보겠습니다. \ No newline at end of file diff --git a/2023/ko/days/day16.md b/2023/ko/days/day16.md new file mode 100644 index 0000000..394cee3 --- /dev/null +++ b/2023/ko/days/day16.md @@ -0,0 +1,94 @@ +# 퍼징 Fuzzing + +'퍼즈 테스트'라고도 하는 퍼징은 컴퓨터 프로그램에 유효하지 않거나 예상치 못한 임의의 데이터를 입력으로 제공하는 소프트웨어 테스트 기법입니다. +퍼징의 목표는 프로그램이 충돌하거나 의도하지 않은 동작을 나타내어 프로그램의 보안 취약점 및 기타 버그를 식별하는 것입니다. + +퍼징은 수동으로 수행하거나 테스트 라이브러리/프레임워크를 사용하여 입력을 만들어서 수행할 수 있습니다. + +퍼징을 더 잘 이해하기 위해 다음 코드를 예로 들어보겠습니다: + +```go +func DontPanic(s string) { + if len(s) == 4 { + if s[0] == 'f' { + if s[1] == 'u' { + if s[2] == 'z' { + if s[3] == 'z' { + panic("error: wrong input") + } + } + } + } + } +} +``` + +이것은 '문자열'을 유일한 인수로 받아들이는 Go 함수입니다. + +함수를 살펴보면, 제공된 입력이 '퍼즈'라는 단어인 경우 한 가지 조건에서만 함수가 'panic'(예: crash)을 일으키는 것처럼 보입니다. + +물론 이 함수는 매우 간단하며 보기만 해도 그 동작을 알 수 있습니다. +그러나 더 복잡한 시스템에서는 이러한 실패 지점이 명확하지 않을 수 있으며, 이를 테스트하거나 단위 테스트 케이스를 작성하는 사람이 놓칠 수 있습니다. + +이때 퍼징이 유용합니다. + +Go 퍼징 라이브러리(Go 1.18부터 표준 언어 라이브러리의 일부)는 테스트 케이스에 대한 많은 입력을 생성한 다음 커버리지와 결과에 따라 어떤 입력이 "흥미로운지"를 결정합니다.이 함수에 대한 퍼즈 테스트를 작성하면 다음과 같은 일이 발생합니다: + +1. 퍼징 라이브러리가 작은 문자열부터 시작하여 크기가 커지는 무작위 문자열을 제공하기 시작합니다. +2. 라이브러리가 길이 4의 문자열을 제공하면 테스트 범위의 변경을 감지하고(`if (len(s) == 4)`가 이제 `true`가 됨) 이 길이의 입력을 계속 생성합니다. +3. 라이브러리가 `f`로 시작하는 길이 4의 문자열을 제공하면 테스트 커버리지의 또 다른 변경 사항(`if s[0] == "f"`는 이제 `true`)을 감지하고 `f`로 시작하는 입력을 계속 생성합니다. +4. `u`와 이중 `z`에 대해서도 같은 일이 반복됩니다. +5. `fuzz`를 입력으로 제공하면 함수가 패닉 상태에 빠지고 테스트가 실패합니다. +6. __퍼즈__에 성공했습니다! + +퍼징의 또 다른 좋은 방법은 코드 충돌을 일으킨 입력을 저장하고 매번 실행하여 퍼징을 통해 발견한 원래 오류가 다시는 코드에 도입되지 않도록 하는 것입니다. + +이 역시 퍼징 프레임워크의 특징일 수 있습니다. + +대부분의 퍼징 라이브러리에서는 테스트하려는 특정 값을 추가할 수 있습니다. +이렇게 하면 우리가 이미 알고 있는 "흥미로운" 값을 라이브러리에 표시하여 생성된 값을 모델링할 수 있으므로 라이브러리에도 도움이 됩니다. + +## 퍼징만으로는 충분하지 않은 경우 + +퍼징은 유용한 기술이지만 도움이 되지 않는 상황도 있습니다. + +예를 들어, 코드에 실패하는 입력이 너무 구체적이어서 도움이 되는 단서가 없는 경우 퍼징 라이브러리가 이를 추측하지 못할 수 있습니다. + +이전 단락의 예제 코드를 다음과 같이 변경해 보겠습니다. + +```go +func DontPanic(s input) { + if (len(s) == 4) && s[0] == 'f' && s[1] == 'u' && s[2] == 'z' && s[3] == 'z' { + panic("error") + } +} +``` + +또는 + +```go +func DontPanic(s input) { + if s == "fuzz" { + panic("error") + } +} +``` + +이런 경우 퍼징은 아무런 단서 없이 정확한 문자열 `퍼즈`를 생성할 가능성이 적기 때문에 도움이 되지 않습니다. +그리고 이전 사례에서 코드 커버리지 변경을 트리거했던 입력(크기 4의 문자열, `z`로 시작하는 크기 4의 문자열 등)은 이제 코드 커버리지를 트리거하지 않습니다. (이전 예제에서는 `if` 체크가 5개인데 비해 지금은 하나만 있기 때문입니다) + +So it's important to understand that while fuzzing is a good way to detect anomalies and corner-cases in your code it is not a silver-bullet for 100% correct code. + +## 실제 예제 + +Go에서 퍼징을 직접 해보고 싶으시다면 [해당 주제에 대한 예제가 있는 내 리포지토리](https://github.com/asankov/go-fuzzing-101/tree/v1)를 확인하세요. + +여기에는 이 글에서 사용한 예제와 실패를 트리거하는 퍼즈 테스트, 그리고 테스트를 직접 실행하는 방법에 대한 지침이 포함되어 있습니다. + +## 리소스 + +- +- [Fuzzing in Go by Valentin Deleplace, Devoxx Belgium 2022](https://www.youtube.com/watch?v=Zlf3s4EjnFU) +- [Write applications faster and securely with Go by Cody Oss, Go Day 2022](https://www.youtube.com/watch?v=aw7lFSFGKZs) + +[17일차](day17.md)에 뵙겠습니다. \ No newline at end of file diff --git a/2023/ko/days/day17.md b/2023/ko/days/day17.md new file mode 100644 index 0000000..233bd5b --- /dev/null +++ b/2023/ko/days/day17.md @@ -0,0 +1,247 @@ +# 퍼징(Fuzzing) 고급 + +어제 우리는 퍼징이 무엇인지, 그리고 퍼즈 테스트(퍼지 입력을 사용하는 단위 테스트)를 작성하는 방법을 배웠습니다. +하지만 퍼즈 테스트는 단순한 단위 테스트 그 이상입니다. +이 방법론을 사용하여 서버로 전송되는 요청을 퍼징하여 웹 애플리케이션을 테스트할 수 있습니다. + +오늘은 웹 서버 퍼지 테스트에 대한 실용적인 접근 방식을 살펴보겠습니다. + +이를 위해 다양한 도구가 도움이 될 수 있습니다. + +[Burp Intruder](https://portswigger.net/burp/documentation/desktop/tools/intruder), [SmartBear](https://smartbear.com/) 등이 있습니다. +하지만 유료 라이선스가 필요한 독점 도구(proprietary tools)도 있습니다. + + +그렇기 때문에 오늘 데모에서는 `Burp Intruder`에서 영감을 받아 유사한 기능을 제공하는 Go로 작성된 간단한 오픈 소스 CLI를 사용하려고 합니다. +이름은 [httpfuzz](https://github.com/JonCooperWorks/httpfuzz)입니다. + + +## Getting started + +이 도구는 아주 간단합니다. +요청에 대한 템플릿(퍼지 데이터에 대한 placeholder를 정의), 단어 목록(퍼지 데이터)을 제공하면 `httpfuzz`가 요청을 렌더링하여 서버로 전송합니다. + +먼저 요청에 대한 템플릿을 정의해야 합니다. +다음 내용으로 `request.txt`라는 파일을 생성합니다. + +```text +POST / HTTP/1.1 +Content-Type: application/json +User-Agent: PostmanRuntime/7.26.3 +Accept: */* +Cache-Control: no-cache +Host: localhost:8000 +Accept-Encoding: gzip, deflate +Connection: close +Content-Length: 35 + +{ + "name": "`S9`", +} +``` + +이것은 JSON 본문이 있는 `/` 경로에 대한 유효한 HTTP `POST` 요청입니다. +본문의 "\`" 기호는 우리가 제공하는 데이터로 대체될 플레이스홀더를 정의합니다. + +`httpfuzz`는 헤더, 경로, URL 매개변수를 퍼즈 처리할 수도 있습니다. + +다음으로 요청에 넣을 입력의 단어 목록을 제공해야 합니다. +다음 내용으로 `data.txt`라는 파일을 생성합니다: + +```text +SOME_NAME +Mozilla/5.0 (Linux; Android 7.0; SM-G930VC Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 +``` + +이 파일에서는 본문 내부에 대체될 두 개의 입력을 정의했습니다. +실제 시나리오에서는 적절한 퍼즈 테스트를 위해 훨씬 더 많은 데이터를 여기에 넣어야 합니다. + +이제 템플릿과 입력이 준비되었으니 도구를 실행해 보겠습니다. +안타깝게도 이 도구는 바이너리로 배포되지 않으므로 소스에서 빌드해야 합니다. +리포지토리를 복제하고 실행합니다. + +```shell +go build -o httpfuzz cmd/httpfuzz.go +``` +(컴퓨터에 최신 버전의 Go가 설치되어 있어야 합니다.) + +이제 바이너리를 얻었으니 실행해 보겠습니다. + +```shell +./httpfuzz \ + --wordlist data.txt \ + --seed-request request.txt \ + --target-header User-Agent \ + --target-param fuzz \ + --delay-ms 50 \ + --skip-cert-verify \ + --proxy-url http://localhost:8080 \ +``` + +- `httpfuzz`는 우리가 호출하는 바이너리입니다. +- `--wordlist data.txt`는 우리가 제공한 입력이 포함된 파일입니다. +- `--seed-request requests.txt`는 요청 템플릿입니다. +- `--target-header User-Agent`는 `httpfuzz`가 `User-Agent` 헤더 대신에 제공된 입력을 사용하도록 지시합니다. +- `--target-param fuzz`는 제공된 입력을 `fuzz` URL 매개변수의 값으로 사용하도록 `httpfuzz`에 지시합니다. +- `--delay-ms 50`은 요청 사이에 50ms를 기다리도록 `httpfuzz`에 지시합니다. +- `--skip-cert-verify`는 `httpfuzz`에게 TLS 확인을 수행하지 않도록 지시합니다. +- `--proxy-url http://localhost:8080`는 `httpfuzz`에게 HTTP 서버의 위치를 알려줍니다. + +2개의 입력과 3개의 위치(본문, `User-Agent` 헤더, `fuzz` 매개변수)에 배치할 수 있습니다. +즉, `httpfuzz`는 6개의 요청을 생성하여 서버로 전송합니다. + +실행해서 어떤 일이 일어나는지 봅시다. +서버로 들어오는 요청을 확인할 수 있도록 모든 요청을 기록하는 간단한 웹 서버를 작성했습니다. + +```shell +$ ./httpfuzz \ + --wordlist data.txt \ + --seed-request request.txt \ + --target-header User-Agent \ + --target-param fuzz \ + --delay-ms 50 \ + --skip-cert-verify \ + --proxy-url http://localhost:8080 \ + +httpfuzz: httpfuzz.go:164: Sending 6 requests +``` + +그리고 서버 로그입니다. + +```text +----- +Got request to http://localhost:8000/ +User-Agent header = [SOME_NAME] +Name = S9 +----- +Got request to http://localhost:8000/?fuzz=SOME_NAME +User-Agent header = [PostmanRuntime/7.26.3] +Name = S9 +----- +Got request to http://localhost:8000/ +User-Agent header = [PostmanRuntime/7.26.3] +Name = SOME_NAME +----- +Got request to http://localhost:8000/ +User-Agent header = [Mozilla/5.0 (Linux; Android 7.0; SM-G930VC Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36] +Name = S9 +----- +Got request to http://localhost:8000/?fuzz=Mozilla%2F5.0+%28Linux%3B+Android+7.0%3B+SM-G930VC+Build%2FNRD90M%3B+wv%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Version%2F4.083+Mobile+Safari%2F537.36 +User-Agent header = [PostmanRuntime/7.26.3] +Name = S9 +----- +Got request to http://localhost:8000/ +User-Agent header = [PostmanRuntime/7.26.3] +Name = Mozilla/5.0 (Linux; Android 7.0; SM-G930VC Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 +``` + +6개의 HTTP 요청이 수신된 것을 확인할 수 있습니다. + +이 중 2개는 `User-Agent` 헤더에 대한 값 파일의 값을 가지고 있고, 4개는 템플릿의 기본 헤더를 가지고 있습니다. + +그 중 2개는 `fuzz` 쿼리 매개변수에 대한 값 파일의 값을 가지고 있고, 4개는 템플릿의 기본 헤더를 가지고 있습니다. + +그 중 2개는 `Name` 본문 속성에 대한 값 파일에서 값을 가져오고, 4개는 템플릿의 기본 헤더를 사용합니다. + +이 도구를 약간 개선하면 이러한 요청의 순열을 다르게 만들 수 있습니다(예: 값 파일의 값으로 `?fuzz=`와 `User-Agent`가 모두 있는 요청). + +`httpfuzz`가 요청의 결과에 대한 정보를 제공하지 않는다는 점에 주목하세요. +이를 파악하려면 서버에 대한 일종의 모니터링을 설정하거나 우리에게 의미 있는 방식으로 결과를 처리하는 `httpfuzz` 플러그인을 작성해야 합니다. +그렇게 해봅시다. + +사용자 정의 플러그인을 작성하려면 [`Listener`](https://github.com/JonCooperWorks/httpfuzz/blob/master/plugin.go#L13) 인터페이스를 구현해야합니다. + +```go +// Listener must be implemented by a plugin to users to hook the request - response transaction. +// The Listen method will be run in its own goroutine, so plugins cannot block the rest of the program, however panics can take down the entire process. +type Listener interface { + Listen(results <-chan *Result) +} +``` + +```go +package main + +import ( + "bytes" + "io/ioutil" + "log" + + "github.com/joncooperworks/httpfuzz" +) + +type logResponseCodePlugin struct { + logger *log.Logger +} + +func (b *logResponseCodePlugin) Listen(results <-chan *httpfuzz.Result) { + for result := range results { + b.logger.Printf("Got %d response from the server\n", result.Response.StatusCode) + } +} + +// New returns a logResponseCodePlugin plugin that simple logs the response code of the response. +func New(logger *log.Logger) (httpfuzz.Listener, error) { + return &logResponseCodePlugin{logger: logger}, nil +} +``` + +이제 플러그인을 빌드해야 합니다. + +```shell +go build -buildmode=plugin -o log exampleplugins/log/log.go +``` + +그리고 `--post-request` 플래그를 통해 `httpfuzz`에 연결할 수 있습니다: + +```shell +$ ./httpfuzz \ + --wordlist data.txt \ + --seed-request request.txt \ + --target-header User-Agent \ + --target-param fuzz \ + --delay-ms 50 \ + --skip-cert-verify \ + --proxy-url http://localhost:8080 \ + --post-request log + +httpfuzz: httpfuzz.go:164: Sending 6 requests +httpfuzz: log.go:15: Got 200 response from the server +httpfuzz: log.go:15: Got 200 response from the server +httpfuzz: log.go:15: Got 200 response from the server +httpfuzz: log.go:15: Got 200 response from the server +httpfuzz: log.go:15: Got 200 response from the server +httpfuzz: log.go:15: Got 200 response from the server +``` + +Voila! +Now we can at least see what the response code from the server was. + +Of course, we can write much more sophisticated plugins that output much more data, but for the purpose of this exercise, that is enough. + + +## 요약 + +퍼징은 단위 테스트를 훨씬 뛰어넘는 매우 강력한 테스트 기법입니다. + +퍼징은 유효한 HTTP 요청의 일부를 서버의 취약점이나 결함을 노출할 수 있는 데이터로 대체하여 HTTP 서버를 테스트하는 데 매우 유용할 수 있습니다. + +웹 애플리케이션 퍼지 테스트에 도움이 되는 무료 및 유료 도구가 많이 있습니다. + +## 리소스 + +[OWASP: Fuzzing](https://owasp.org/www-community/Fuzzing) + +[OWASP: Fuzz Vectors](https://owasp.org/www-project-web-security-testing-guide/v41/6-Appendix/C-Fuzz_Vectors) + +[Hacking HTTP with HTTPfuzz](https://medium.com/swlh/hacking-http-with-httpfuzz-67cfd061b616) + +[Fuzzing the Stack for Fun and Profit at DefCamp 2019](https://www.youtube.com/watch?v=qCMfrbpuCBk&list=PLnwq8gv9MEKiUOgrM7wble1YRsrqRzHKq&index=33) + +[HTTP Fuzzing Scan with SmartBear](https://support.smartbear.com/readyapi/docs/security/scans/types/fuzzing-http.html) + +[Fuzzing Session: Finding Bugs and Vulnerabilities Automatically](https://youtu.be/DSJePjhBN5E) + +[Fuzzing the CNCF Landscape](https://youtu.be/zIyIZxAZLzo) + +[18일차](day18.md)에 뵙겠습니다. diff --git a/2023/ko/days/day18.md b/2023/ko/days/day18.md new file mode 100644 index 0000000..8beb171 --- /dev/null +++ b/2023/ko/days/day18.md @@ -0,0 +1,40 @@ +# DAST (동적 애플리케이션 보안 테스트) +DAST(Dynamic Application Security Testing)는 외부 소스로부터의 공격을 시뮬레이션하여 애플리케이션의 보안을 평가하는 데 사용되는 기술입니다. +아이디어는 가능한 한 많은 블랙박스 침투 테스트를 자동화하는 것입니다. +실제 사람의 시간을 절약하고 다른 보안 도구(예: IAST)로의 트래픽을 생성하는 데 추가로 사용할 수 있습니다. + +그럼에도 불구하고 조직이 애플리케이션을 프로덕션 환경에 배포하기 전에 개발 프로세스 초기에 잠재적인 취약점을 발견할 수 있도록 도와주기 때문에 SSDLC의 필수 구성 요소입니다. DAST 테스트를 수행함으로써 조직은 보안 사고를 예방하고 공격자에 의해 데이터와 자산이 손상되지 않도록 보호할 수 있습니다. + +## 도구 + +DAST를 수행하는 데 사용할 수 있는 다양한 오픈 소스 도구가 있습니다. ZAP, Burp Suite, Arachni 등이 있습니다. + + 이러한 도구는 SQL 인젝션, 크로스 사이트 스크립팅 및 기타 일반적인 취약점 등 애플리케이션에 대한 다양한 유형의 공격을 시뮬레이션할 수 있습니다. + + 예를 들어 애플리케이션이 SQL 인젝션에 취약한 경우, DAST 툴은 애플리케이션에 `OR 1=1 --`과 같은 악성 SQL 쿼리를 전송하고 응답을 평가하여 취약한지 여부를 확인할 수 있습니다. 애플리케이션이 취약한 경우 데이터베이스의 모든 레코드를 반환하여 SQL 인젝션 공격이 성공했음을 나타낼 수 있습니다. + +일부 테스트는 상당히 침략적일 수 있으며(예: 'DROP TABLE' 또는 이와 유사한 것을 포함할 수 있음), 적어도 데이터베이스에 많은 양의 테스트 데이터를 넣거나 심지어 앱에 DOS를 가할 수도 있습니다. + +> __DAST 도구는 프로덕션 환경에서 절대 실행해서는 안 됩니다!!!__ + +모든 도구에는 애플리케이션에 대한 인증 가능성이 있으며 이로 인해 프로덕션 자격 증명이 손상될 수 있습니다. 또한 테스트 환경에 대해 인증된 스캔을 실행할 때는 적절한 역할을 사용해야 합니다(물론 RBAC 모델이 존재하는 경우 애플리케이션에 대해). 예를 들어, DAST는 다른 사용자를 삭제하거나 수정할 수 있는 역할을 사용하면 전체 환경을 사용할 수 없게 될 수 있으므로 사용하지 않아야 합니다. +다른 테스트 방법론과 마찬가지로 범위를 분석해야 하므로 불필요한 대상을 검사하지 않습니다. + +## 사용법 +일반적인 오류는 실제 애플리케이션이 아닌 보상 보안 제어 (compensating security control, 예: WAF)를 스캔하는 것입니다. + +DAST는 본질적으로 애플리케이션 보안 테스트 도구이며 보안 완화가 아닌 실제 애플리케이션에 대해 사용해야 합니다. 상당히 표준화된 공격을 사용하기 때문에 외부 제어가 공격 트래픽을 차단할 수 있으며, 이러한 방식으로 잠재적으로 악용될 수 있는 플로우를 커버할 수 있습니다.(정의에 따라 공격자는 결국 이러한 조치를 우회할 수 있음) + +실제 스캔은 매우 느리기 때문에 때때로 DevOps 파이프라인 외부에서 실행해야 합니다. 야간이나 주말에 실행하는 것이 좋은 예입니다. 일부 간단한 도구(zap / arachny 등)를 파이프라인에 사용할 수 있지만 스캔의 특성으로 인해 전체 개발 프로세스의 속도가 느려질 수 있습니다. + +DAST 테스트가 완료되면 결과를 분석하여 발견된 취약점을 식별합니다. 그런 다음 조직은 취약점을 해결하고 애플리케이션의 전반적인 보안을 개선하기 위해 적절한 수정 조치를 취할 수 있습니다. 여기에는 기본 코드 수정, 입력 유효성 검사 및 필터링과 같은 추가 보안 제어 구현 또는 두 가지 모두 포함될 수 있습니다. + +결론적으로, 애플리케이션의 보안을 보장하기 위해서는 SSDLC에서 DAST를 사용하는 것이 필수적입니다. 개발 프로세스 초기에 DAST 테스트를 수행하고 취약점을 식별함으로써 조직은 보안 사고를 예방하고 잠재적인 위협으로부터 자산을 보호할 수 있습니다. ZAP, Burp Suite, Arachni와 같은 오픈 소스 도구를 사용하여 DAST 테스트를 수행하고 조직의 전반적인 보안 태세를 개선할 수 있습니다. +DevSecOps 파이프라인의 다른 모든 도구와 마찬가지로 DAST가 유일한 스캐너가 되어서는 안 되며, 다른 모든 도구와 마찬가지로 모의 침투 테스트와 모범 개발 관행을 대체할 수 없습니다. + +## 유용한 링크와 오픈소스 도구가 몇 가지 +- https://github.com/zaproxy/zaproxy +- https://www.arachni-scanner.com/ +- https://owasp.org/www-project-devsecops-guideline/latest/02b-Dynamic-Application-Security-Testing + +[19일차](day19.md)에 뵙겠습니다. diff --git a/2023/ko/days/day19.md b/2023/ko/days/day19.md new file mode 100644 index 0000000..990dd05 --- /dev/null +++ b/2023/ko/days/day19.md @@ -0,0 +1,48 @@ +# IAST (Interactive Application Security Testing) + +IAST는 웹 애플리케이션의 취약점을 식별하고 개발자가 이를 수정할 수 있도록 설계된 보안 테스트 도구의 일종입니다. 이 도구는 애플리케이션의 런타임 환경에 작은 에이전트를 삽입하고 실시간으로 동작을 모니터링하는 방식으로 작동합니다. 따라서 IAST 도구는 정적 분석이나 모의 공격에 의존하지 않고 취약점이 발생할 때 이를 식별할 수 있습니다. + + instrumentation + +IAST는 소프트웨어 계측(software instrumentation) 또는 계측기를 사용하여 애플리케이션이 실행되는 동안 모니터링하고 애플리케이션이 수행하는 작업과 성능에 대한 정보를 수집하는 방식으로 작동합니다. IAST 솔루션은 실행 중인 애플리케이션에 에이전트와 센서를 배포하고 수동 테스트, 자동 테스트 또는 이 둘의 조합으로 시작된 모든 애플리케이션 상호 작용을 지속적으로 분석하여 실시간으로 취약성을 식별함으로써 애플리케이션을 계측합니다. +IAST 에이전트는 애플리케이션 내부에서 실행되며 알려진 공격 패턴을 모니터링합니다. 애플리케이션의 일부이므로 서로 다른 구성 요소 간의 트래픽을 모니터링할 수 있습니다. (클래식 MVC 배포 및 마이크로서비스 배포 간) + +## IAST의 전제조건 + +- 애플리케이션을 계측해야 합니다. (Agent를 주입해야 함. +- 수동 또는 자동 테스트를 통해 트래픽을 생성해야 합니다. 또 다른 가능한 접근 방식은 DAST 도구를 사용하는 것입니다. (예를 들어 OWASP ZAP을 사용할 수 있음) + + +## 장점 + +IAST 도구의 주요 장점 중 하나는 취약점과 취약점 수정 방법에 대한 상세하고 정확한 정보를 제공할 수 있다는 것입니다. 개발자가 수동으로 취약점을 검색하거나 테스트 환경에서 취약점을 재현할 필요가 없으므로 많은 시간과 노력을 절약할 수 있습니다. + +또한 IAST 도구는 사용자 상호 작용이 필요하거나 특정 조건에서 트리거되는 취약점 등 다른 테스트 방법으로는 놓칠 수 있는 취약점을 식별할 수 있습니다. + +테스트 시간은 사용되는 테스트에 따라 다르며(IAST는 독립형 시스템이 아니므로), 더 빠른 테스트(자동화된 테스트)를 CI/CD 파이프라인에 포함할 수 있습니다. 다양한 종류의 취약점을 탐지하는 데 사용할 수 있으며 도구의 특성상('실제 트래픽만' 찾기 때문에) 다른 테스트 유형에 비해 위양성/위음성 결과가 상대적으로 뒤처집니다. +IAST는 일반적인 테스트 도구와 실시간 보호(이 경우 RAST라고 함)의 두 가지 방식으로 사용할 수 있습니다. 두 가지 모두 동일한 원칙에 따라 작동하며 함께 사용할 수 있습니다. + +## 몇 가지 단점 +- 비교적 새로운 기술이기 때문에 보안 팀과 도구 빌더(오픈 소스 또는 상용) 모두에 대한 지식과 경험이 많지 않습니다. +- 이 솔루션은 단독으로 사용할 수 없으며 누군가(또는 무언가)가 트래픽 패턴을 생성해야 합니다. 테스트 중에 가능한 모든 엔드포인트를 쿼리하는 것이 중요합니다. +- 결과는 트래픽을 기반으로 합니다. 앱/사이트의 일부에 대한 트래픽이 없는 경우 테스트가 이루어지지 않으므로 결과가 생성되지 않습니다. +- 앱에 대한 계측이 필요하기 때문에 특히 소스 스캔 도구(SAST 또는 SCA)에 비해 상당히 복잡할 수 있습니다. + +각각 고유한 특징과 기능을 갖춘 여러 가지 IAST 도구를 사용할 수 있습니다. + +## IAST 도구의 일반적인 기능 + +- 실시간 모니터링: IAST 도구는 애플리케이션의 동작을 실시간으로 모니터링하여 취약점이 발생할 때 이를 식별할 수 있습니다. +- 취약점 식별: IAST 도구는 인젝션 공격, 크로스 사이트 스크립팅(XSS), 크로스 사이트 요청 위조(CSRF)를 포함한 광범위한 취약점을 식별할 수 있습니다. +- 수정 지침: IAST 도구는 코드 스니펫 및 보안 코딩 관행에 대한 권장 사항을 포함하여 식별된 취약점을 수정하는 방법에 대한 자세한 정보를 제공하는 경우가 많습니다. +- 다른 도구와의 통합: IAST 도구는 정적 코드 분석 또는 침투 테스트 도구와 같은 다른 보안 테스트 도구와 통합하여 애플리케이션의 보안에 대한 보다 포괄적인 보기를 제공할 수 있습니다. + +IAST 도구는 실시간으로 취약점을 식별하고 수정하여 시간과 노력을 절약할 수 있으므로 개발자의 툴킷에 추가할 수 있는 유용한 도구가 될 수 있습니다. 개발자로서 IAST 도구 사용에 관심이 있다면 다양한 옵션을 사용할 수 있으므로 여러 도구를 조사하고 비교하여 자신의 필요에 가장 적합한 도구를 찾는 것이 중요합니다. + +## 도구 예시 + +시중에는 오픈 소스 도구가 거의 없습니다. 상용 도구를 예로 들 수 있습니다: Contrast Community Edition(CE) - 앱 1개와 최대 5명의 사용자를 위한 모든 기능을 갖춘 버전(일부 엔터프라이즈 기능은 비활성화됨). Contrast CE는 Java 및 .NET만 지원합니다. + +여기에서 찾을 수 있습니다. https://www.contrastsecurity.com/contrast-community-edition + +[20일차](day20.md)에 뵙겠습니다. diff --git a/2023/ko/days/day20.md b/2023/ko/days/day20.md new file mode 100644 index 0000000..bcfd24b --- /dev/null +++ b/2023/ko/days/day20.md @@ -0,0 +1,155 @@ +# IAST와 DAST의 결합 - 실습 시간 + +IAST와 DAST가 무엇인지 배웠다면 이제 실제 애플리케이션에서 이 프로세스를 사용하여 취약점을 찾아보는 실습을 해보겠습니다. + +**참고: 오픈 소스 IAST 구현이 없으므로 상용 솔루션을 사용해야 합니다. +무료 티어가 있으므로 비용을 지불하지 않고도 실습을 따라갈 수 있으니 걱정하지 마세요. + + + +여기에는 테스트하고 활용할 취약한 Java 애플리케이션, 손쉬운 설정을 위한 Docker 및 Docker Compose, IAST 솔루션용 [Contrast Community Edition](https://www.contrastsecurity.com/contrast-community-edition?utm_campaign=ContrastCommunityEdition&utm_source=GitHub&utm_medium=WebGoatLab)이 포함되어 있습니다. + +## 전제조건 + +- [Docker](https://www.docker.com/products/docker-desktop/) +- [Docker Compose](https://docs.docker.com/compose/) +- Contrast CE 계정. [이 곳](https://www.contrastsecurity.com/contrast-community-edition?utm_campaign=ContrastCommunityEdition&utm_source=GitHub&utm_medium=WebGoatLab)에서 무료로 회원가입하세요. + +**참고** : 이 글과 90일간의 데브옵스 프로그램의 작성자는 Contrast Security와 어떤 식으로든 관련이 있거나 관련이 있습니다. +오픈 소스 솔루션이 없고, 이 솔루션에는 결제나 신용카드 제공이 필요 없는 무료 티어가 있기 때문에 이 상용 솔루션을 사용하고 있습니다. + +1. 오픈 소스 IAST 구현이 없기 때문에 일부 무료 라이선스가 있는 상용 소스를 사용합니다. 이를 위해 2 개의 구성 요소가 필요합니다: + IAST 솔루션 - . Mac 또는 Linux 환경에 설치된 docker 및 docker-compose가 필요합니다(이 실습은 Mint에서 테스트되었습니다). README를 따라 Contrast에서 계정을 생성하세요. + +## Getting started + + +시작하려면 [리포지토리](https://github.com/rstatsinger/contrast-java-webgoat-docker)를 복제합니다. + +Contrast Security에서 자격 증명을 받습니다. +오른쪽 상단의 `Organization Settings` -> `Agent`에서 당신의 이름을 클릭합니다. +그리고 `Agent Username`, `Agent Service Key` and `API Key`를 가져옵니다. +새로 복제된 리포지토리의 `.env.template` 파일에서 이 값으로 바꿉니다. + +**참고:** 이 값은 비밀입니다. +Git에 커밋하지 마세요. +실수로 이 값을 커밋하지 않도록 `.env.template`을 `.gitignore` 아래에 두는 것이 가장 좋습니다. + + +## 취약한 애플리케이션 실행하기 + +취약한 애플리케이션을 실행합니다. + +```sh +./run.sh +``` + +또는 + +```sh +docker compose up +``` + +준비가 완료되면 에서 애플리케이션 UI에 액세스할 수 있습니다. + +## 피해 입히기 + +이제 취약한 애플리케이션이 생겼으니 이를 익스플로잇해 보겠습니다. + +1. [여기](https://www.zaproxy.org/download/)에서 ZAP 프록시를 설치합니다. + + 가장 쉬운 방법은 DAST 스캐너를 이용하는 것입니다. + 이러한 스캐너 중 하나는 [ZAP Proxy](https://www.zaproxy.org/)입니다. + 무료 오픈소스 웹 앱 스캐너입니다. + +2. [여기](https://github.com/Grunny/zap-cli)에서 `zap-cli`를 설치합니다. + + 다음으로 `zap-cli`를 설치합니다. + `zap-cli`는 ZAP Proxy를 위한 오픈소스 CLI입니다. + +3. ZAP 프록시 실행 + + 설치된 위치에서 ZAP 프록시를 실행합니다. + Linux Mint에서는 기본적으로 `/opt/zaproxy`에 있습니다. + MacOS에서는 `Applications`에 있습니다. + +4. `ZAP_API_KEY` 및 `ZAP_PORT`에 대한 환경 변수를 설정합니다. + + ZAP 프록시에서 이 값을 가져옵니다. + `Options...` -> `API`로 이동하여 API 키를 가져옵니다. + + `Options...` -> `Network` -> `Local Servers/Proxies`로 이동하여 포트를 설정하고 가져옵니다. + +5. `zap-cli`로 몇 가지 명령을 실행합니다. + + 예시: + + ```sh + zap-cli quick-scan -s all --ajax-spider -r http://127.0.0.1:8080/WebGoat/login.mvc + ``` + + 또는 [리포지토리](https://github.com/rstatsinger/contrast-java-webgoat-docker/blob/master/Lab-WebGoat.pdf)에 있는 지침에 따라 취약한 애플리케이션을 손상시킬 수 있습니다. + +6. Constrast에서 결과 관찰 + + 어느 쪽이든, Contrast에서 애플리케이션의 **Vulnerabilities** 탭으로 이동하면, Contrast가 취약점을 감지한 것을 확인할 수 있을 것입니다. + 조치를 취하라는 경고가 표시됩니다. + +## 보너스: 이미지 스캐닝 + +애플리케이션의 동작을 관찰하여 공격을 탐지하는 데 IAST 솔루션이 어떻게 도움이 되었는지 살펴보았습니다. +이러한 공격을 애초에 막을 수 있었는지 살펴봅시다. + +이 데모에 사용한 취약한 애플리케이션은 컨테이너로 된 패키지였습니다. +[14일차](day14.md)와 [15일차](day15.md)에서 배운 `grype` 스캐너를 통해 이 컨테이너를 스캔하고 결과를 확인해 보겠습니다. + +```sh +$ grype contrast-java-webgoat-docker-webgoat + ✔ Vulnerability DB [no update available] + ✔ Loaded image + ✔ Parsed image + ✔ Cataloged packages [316 packages] + ✔ Scanned image [374 vulnerabilities] +NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY +apt 1.8.2.3 deb CVE-2011-3374 Negligible +axis 1.4 java-archive GHSA-55w9-c3g2-4rrh Medium +axis 1.4 java-archive GHSA-96jq-75wh-2658 Medium +bash 5.0-4 deb CVE-2019-18276 Negligible +bash 5.0-4 (won't fix) deb CVE-2022-3715 High +bsdutils 1:2.33.1-0.1 deb CVE-2022-0563 Negligible +bsdutils 1:2.33.1-0.1 (won't fix) deb CVE-2021-37600 Low +commons-beanutils 1.8.3 java-archive CVE-2014-0114 High +commons-beanutils 1.8.3 java-archive CVE-2019-10086 High +commons-beanutils 1.8.3 1.9.2 java-archive GHSA-p66x-2cv9-qq3v High +commons-beanutils 1.8.3 1.9.4 java-archive GHSA-6phf-73q6-gh87 High +commons-collections 3.2.1 java-archive CVE-2015-6420 High +commons-collections 3.2.1 3.2.2 java-archive GHSA-6hgm-866r-3cjv High +commons-collections 3.2.1 3.2.2 java-archive GHSA-fjq5-5j5f-mvxh Critical +commons-fileupload 1.3.1 java-archive CVE-2016-1000031 Critical +commons-fileupload 1.3.1 java-archive CVE-2016-3092 High +commons-fileupload 1.3.1 1.3.2 java-archive GHSA-fvm3-cfvj-gxqq High +commons-fileupload 1.3.1 1.3.3 java-archive GHSA-7x9j-7223-rg5m Critical +commons-io 2.4 java-archive CVE-2021-29425 Medium +commons-io 2.4 2.7 java-archive GHSA-gwrp-pvrq-jmwv Medium +coreutils 8.30-3 deb CVE-2017-18018 Negligible +coreutils 8.30-3 (won't fix) deb CVE-2016-2781 Low +curl 7.64.0-4+deb10u3 deb CVE-2021-22922 Negligible +curl 7.64.0-4+deb10u3 deb CVE-2021-22923 Negligible + +``` + +보시다시피 이 이미지는 취약점으로 가득 차 있습니다. + +각 취약점을 자세히 살펴보면 RCE(원격 코드 실행), SQL 인젝션, XML 외부 엔티티 취약점 등과 같은 취약점이 있음을 알 수 있습니다. + +## 주간 요약 + +IAST와 DAST는 애플리케이션의 동작을 모니터링하여 애플리케이션의 취약점을 찾는 데 도움이 되는 중요한 방법입니다. +이 작업은 애플리케이션이 이미 배포된 후에 수행됩니다. + +컨테이너 이미지 스캔은 컨테이너 내부에 있는 라이브러리를 기반으로 애플리케이션의 취약점을 찾는 데 도움이 될 수 있습니다. + +이미지 스캔과 IAST/DAST는 상호 배타적이지 않습니다. +둘 다 보안 SDLC에서 각자의 역할을 하며 공격자보다 먼저 다양한 문제를 발견하는 데 도움이 될 수 있습니다. + +[21일차](day21.md)에 뵙겠습니다. From 978747a243a6d7324a2e140f9dc986909e421b32 Mon Sep 17 00:00:00 2001 From: Cotchi666 Date: Sat, 21 Oct 2023 11:08:57 +0700 Subject: [PATCH 03/16] INIT VIETNAMESE TRANSLATION README&DAY1 2023 --- 2023/vi/2023.md | 170 ++++++++++++++++++++++++++++++++++++++++++ 2023/vi/2023.png | Bin 0 -> 162893 bytes 2023/vi/days/day01.md | 65 ++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 2023/vi/2023.md create mode 100644 2023/vi/2023.png create mode 100644 2023/vi/days/day01.md diff --git a/2023/vi/2023.md b/2023/vi/2023.md new file mode 100644 index 0000000..563016d --- /dev/null +++ b/2023/vi/2023.md @@ -0,0 +1,170 @@ +# 90DaysOfDevOps + +

+ 90DaysOfDevOps Logo +

+ +English Version | [한국어](2023/ko/README.md) | [Tiếng Việt](/2023/vi/2023.md) + +Dự án này được sử dụng để làm tư liệu cho chuyến hành trình có được nền tảng kiến thức tốt về “DevOps của tôi. + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N33YRCS) + +Nếu bạn có những thắc mắc và muốn tham gia thì hãy gia nhập vào discord, chia sẽ những thắc mắc và cũng như những câu chuyện của bạn với cộng đồng. + +[![](https://dcbadge.vercel.app/api/server/vqwPrNQsyK)](https://discord.gg/vqwPrNQsyK) + +Hoặc liên hệ chúng tôi trên Twitter, tên hay gọi của tôi là [@MichaelCade1](https://twitter.com/MichaelCade1) bạn có thể tìm ra tác giả phiên bản 2023 cũng như trên Twitter được liên kết ở ngay bên dưới. + +## Danh sách các chủ đề + +| Chủ đề | Tác giả | Thời gian | Twitter Handle | +| -------------------------------------- | ----------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------- | +| DevSecOps | Michael Cade | 1st Jan - 6th Jan | [@MichaelCade1](https://twitter.com/MichaelCade1) | +| Secure Coding | Prateek Jain | 7th Jan - 13th Jan | [@PrateekJainDev](https://twitter.com/PrateekJainDev) | +| Continuous Build, Integration, Testing | Anton Sankov and Svetlomir Balevski | 14th Jan - 20th Jan | [@a_sankov](https://twitter.com/a_sankov) | +| Continuous Delivery & Deployment | Anton Sankov | 21st Jan - 27th Jan | [@a_sankov](https://twitter.com/a_sankov) | +| Runtime Defence & Monitoring | Ben Hirschberg | 28th Jan - 3rd Feb | [@slashben81](https://twitter.com/slashben81) | +| Secrets Management | Bryan Krausen | 4th Feb - 10th Feb | [@btkrausen](https://twitter.com/btkrausen) | +| Python | Rishab Kumar | 11th Feb - 17th Feb | [@rishabk7](https://twitter.com/rishabk7) | +| AWS | Chris Williams | 18th Feb - 24th Feb | [@mistwire](https://twitter.com/mistwire) | +| OpenShift | Dean Lewis | 25th Feb - 3rd Mar | [@saintdle](https://twitter.com/saintdle) | +| Databases | Taylor Riggan & Andrew Pruski | 4th Mar - 10th Mar | [@triggan](https://twitter.com/triggan) & [@dbafromthecold](https://twitter.com/dbafromthecold) | +| Serverless | Kristi Perreault | 11th Mar - 17th Mar | [@kperreault95](https://twitter.com/kperreault95) | +| Service Mesh | Marino Wijay | 18th Mar - 24th Mar | [@virtualized6ix](https://twitter.com/virtualized6ix) | +| Engineering for Day 2 Ops | Alistair Hey | 25th Mar - 31st Mar | [@alistair_hey](https://twitter.com/alistair_hey) | + +## Progress + +- [✔️] ♾️ 1 > [2022 Reflection & Welcome 2023](2023/day01.md) + +### DevSecOps + +- [✔️] ♾️ 2 > [The Big Picture: DevSecOps](2023/day02.md) +- [✔️] ♾️ 3 > [Think like an Attacker](2023/day03.md) +- [✔️] ♾️ 4 > [Red Team vs. Blue Team](2023/day04.md) +- [✔️] ♾️ 5 > [OpenSource Security](2023/day05.md) +- [✔️] ♾️ 6 > [Hands-On: Building a weak app](2023/day06.md) + +### Secure Coding + +- [✔️] 🔐 7 > [Secure Coding Overview](2023/day07.md) +- [✔️] 🔐 8 > [SAST Overview](2023/day08.md) +- [✔️] 🔐 9 > [SAST Implementation with SonarCloud](2023/day09.md) +- [✔️] 🔐 10 > [Software Composition Analysis Overview](2023/day10.md) +- [✔️] 🔐 11 > [SCA Implementation with OWASP Dependency Check](2023/day11.md) +- [✔️] 🔐 12 > [Secure Coding Practices](2023/day12.md) +- [✔️] 🔐 13 > [Additional Secure Coding Practices](2023/day13.md) + +### Continuous Build, Integration, Testing + +- [✔️] ⚒️ > [Container Image Scanning](2023/day14.md) +- [✔️] ⚒️ > [Container Image Scanning Advanced](2023/day15.md) +- [✔️] ⚒️ > [Fuzzing](2023/day16.md) +- [✔️] ⚒️ > [Fuzzing Advanced](2023/day17.md) +- [✔️] ⚒️ > [DAST](2023/day18.md) +- [✔️] ⚒️ > [IAST](2023/day19.md) +- [✔️] ⚒️ > [Practical Lab on IAST and DAST](2023/day20.md) + +### Continuous Delivery & Deployment + +- [✔️] 🚚 21 > [Continuous Image Repository Scan](2023/day21.md) +- [✔️] 🚚 22 > [Continuous Image Repository Scan - Container Registries](2023/day22.md) +- [✔️] 🚚 23 > [Artifacts Scan](2023/day23.md) +- [✔️] 🚚 24 > [Signing](2023/day24.md) +- [✔️] 🚚 25 > [Systems Vulnerability Scanning](2023/day25.md) +- [✔️] 🚚 26 > [Containers Vulnerability Scanning](2023/day26.md) +- [✔️] 🚚 27 > [Network Vulnerability Scan](2023/day27.md) + +### Runtime Defence & Monitoring + +- [✔️] 🏃 28 > [System monitoring and auditing](2023/day28.md) +- [✔️] 🏃 29 > [Application level monitoring](2023/day29.md) +- [✔️] 🏃 30 > [Detecting suspicious application behavior](2023/day30.md) +- [✔️] 🏃 31 > [Runtime network protections and policies](2023/day31.md) +- [✔️] 🏃 32 > [Vulnerability and patch management](2023/day32.md) +- [✔️] 🏃 33 > [Application runtime and network policies](2023/day33.md) +- [✔️] 🏃 34 > [Runtime access control](2023/day34.md) + +### Secrets Management + +- [✔️] 🕵 35 > [Understanding the Importance of Secrets Management](2023/day35.md) +- [✔️] 🕵 36 > [Securing Secrets with HashiCorp Vault](2023/day36.md) +- [✔️] 🕵 37 > [Working with HashiCorp Vault's Secrets Engines](2023/day37.md) +- [✔️] 🕵 38 > [Increase the Security Posture of Your Organization with Dynamic Credentials](2023/day38.md) +- [✔️] 🕵 39 > [Getting Hands-On with HashiCorp Vault](2023/day39.md) +- [] 🕵 40 > [](2023/day40.md) +- [] 🕵 41 > [](2023/day41.md) + +### Python + +- [✔️] 🐍 42 > [Programming Language: Introduction to Python](2023/day42.md) +- [✔️] 🐍 43 > [Python Loops, functions, modules and libraries](2023/day43.md) +- [✔️] 🐍 44 > [Data Structures and OOP in Python](2023/day44.md) +- [✔️] 🐍 45 > [Debugging, testing and Regular expression](2023/day45.md) +- [✔️] 🐍 46 > [Web development in Python](2023/day46.md) +- [✔️] 🐍 47 > [Automation with Python](2023/day47.md) +- [✔️] 🐍 48 > [Let's build an App in Python](2023/day48.md) + +### AWS + +- [✔️] ☁️ 49 > [AWS Cloud Overview](2023/day49.md) +- [✔️] ☁️ 50 > [Create Free Tier Account & Enable Billing Alarms](2023/day50.md) +- [✔️] ☁️ 51 > [Infrastructure as Code (IaC) and CloudFormation](2023/day51.md) +- [✔️] ☁️ 52 > [Identity and Access Management (IAM)](2023/day52.md) +- [✔️] ☁️ 53 > [AWS Systems Manager](2023/day53.md) +- [✔️] ☁️ 54 > [AWS CodeCommit](2023/day54.md) +- [✔️] ☁️ 55 > [AWS CodePipeline](2023/day55.md) + +### Red Hat OpenShift + +- [✔️] ⛑️ 56 > [What does Red Hat OpenShift bring to the party? An Overview](2023/day56.md) +- [✔️] ⛑️ 57 > [Understanding the OpenShift Architecture, Installation Methods and Process](2023/day57.md) +- [✔️] ⛑️ 58 > [Deploying Red Hat OpenShift on VMware vSphere](2023/day58.md) +- [✔️] ⛑️ 59 > [Deploying applications and getting a handle on Security Constraints Context (SCC)](2023/day59.md) +- [✔️] ⛑️ 60 > [Looking at OpenShift Projects - Creation, Configuration and Governance](2023/day60.md) +- [✔️] ⛑️ 61 > [Understanding Authentication, Role-Based Access Control (RBAC) and Auditing in Red Hat OpenShift: Control and Secure Your Cluster](2023/day61.md) +- [✔️] ⛑️ 62 > [Compliance and Vulnerability Scanning provided by Red Hat OpenShift Operators](2023/day62.md) + +### Databases + +- [✔️] 🛢 63 > [An introduction to databases](2023/day63.md) +- [✔️] 🛢 64 > [Querying data in databases](2023/day64.md) +- [✔️] 🛢 65 > [Backing up and restoring databases](2023/day65.md) +- [✔️] 🛢 66 > [High availability and disaster recovery](2023/day66.md) +- [✔️] 🛢 67 > [Performance tuning](2023/day67.md) +- [✔️] 🛢 68 > [Database security](2023/day68.md) +- [✔️] 🛢 69 > [Monitoring and troubleshooting database issues](2023/day69.md) + +### Serverless + +- [✔️] 👩🏿‍💻 70 > [What is Serverless?](2023/day70.md) +- [✔️] 👩🏿‍💻 71 > [Serverless Compute](2023/day71.md) +- [✔️] 👩🏿‍💻 72 > [Serverless Storage](2023/day72.md) +- [✔️] 👩🏿‍💻 73 > [Serverless APIs](2023/day73.md) +- [✔️] 👩🏿‍💻 74 > [Serverless Orchestration](2023/day74.md) +- [✔️] 👩🏿‍💻 75 > [Serverless & Well Architected](2023/day75.md) +- [✔️] 👩🏿‍💻 76 > [Serverless - Beyond the Basics](2023/day76.md) + +### Service Mesh + +- [✔️] 🧩 77 > [Let's break down a Service Mesh](2023/day77.md) +- [✔️] 🧩 78 > [Install and Test a Service Mesh](2023/day78.md) +- [✔️] 🧩 79 > [Comparing Different Service Meshes](2023/day79.md) +- [✔️] 🧩 80 > [Traffic Engineering Basics](2023/day80.md) +- [✔️] 🧩 81 > [Observability in your Mesh](2023/day81.md) +- [✔️] 🧩 82 > [Securing your microservices](2023/day82.md) +- [✔️] 🧩 83 > [Sidecar or Sidecar-less? Enter Ambient Mesh](2023/day83.md) + +### Engineering for Day 2 Ops + +- [✔️] 👷🏻‍♀️ 84 > [Writing an API - What is an API?](2023/day84.md) +- [✔️] 👷🏻‍♀️ 85 > [Queues, Queue workers and Tasks (Asynchronous architecture)](2023/day85.md) +- [✔️] 👷🏻‍♀️ 86 > [Designing for Resilience, Redundancy and Reliability](2023/day86.md) +- [✔️] 👷🏻‍♀️ 87 > [Zero Downtime Deployments](2023/day87.md) +- [✔️] 👷🏻‍♀️ 88 > [Monitoring, Alerting and On-Call](2023/day88.md) +- [✔️] 👷🏻‍♀️ 89 > [Oops: When something goes wrong - Post Mortems](2023/day89.md) + +### 2023 wrap up + +- [✔️] 🏁 90 > [Wrapping up the 2023 edition](2023/day90.md) diff --git a/2023/vi/2023.png b/2023/vi/2023.png new file mode 100644 index 0000000000000000000000000000000000000000..8533dfa1100c3612592a0a23aef78dba57c53512 GIT binary patch literal 162893 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 P00000NkvXXu0mjfF)NZ{ literal 0 HcmV?d00001 diff --git a/2023/vi/days/day01.md b/2023/vi/days/day01.md new file mode 100644 index 0000000..e4b476e --- /dev/null +++ b/2023/vi/days/day01.md @@ -0,0 +1,65 @@ +## Nhỉn lại 2022 & Chào đón 2023 + +Chào mọi người và mừng trở lại với phiên bản 2023 #90DaysOfDevOps trong bài đăng Ngày 1 này, kế hoạch là nhìn lại phiên bản năm 2022, một vài thống kê, phản hồi và những ý tưởng mà chúng ta đã có trong suốt năm qua. + +### Tóm tắt 2022 + +Đầu tiên, WAO! Nhớ đến công việc này mà thôi đã nghĩ ra ở giao thừa 2021 là dành ra 90 ngày đầu của năm 2022 để học và tổng hợp tư liệu của việc học đó, ghi chú một cách cơ bản sau khi xem nhiều người cực kì giỏi hơn tôi trên Youtube. + +Nhanh chóng một năm, chúng ta có khá nhiều con số ấn tượng ở dự án này, tôi nghĩ tôi đã đề cập ít nhất ở nơi đâu đó trong dự án, nhưng tôi chắc rằng tôi đã từng đề cập ở chỗ khác rất nhiều lần là bất kì nội dung nào mà giúp được thậm chí dù chỉ một người thì nó rất xứng đáng để làm, quả là đán kinh ngạc khi có được những con số như này từ khi dự án chúng ta được đánh dấu (stars) đến khi được phân nhánh copy từ người khác (folks). + +![](images/day01-1.jpg) + +Also, nearly **500** watchers of the repository! + +First, I want to thank everyone for sharing the repository with the community. Hearing that Microsoft and other massive tech vendors have shared this with their teams is humbling. + +Secondly, I would like to thank the contributors. This started out as a place to take notes and learn in public, and it wasn't until a few days in that saw people correcting my poor spelling and grammar. (I am sure the same will happen this year) But the biggest and most amazing thing was the community that started to translate the repository into their native language! How amazing to think this was happening and helping non-native English speakers learn more about the powers of DevOps. + +![](images/day01-2.png) + +If you would like to find the amazing contributors on the repository, then you can head to the [Contributors](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/Contributors.md) + +### Continuous Learning + +I mentioned and mentioned a lot that we are never done learning, if you think you are then you picked the wrong industry as things are changing all the time and at a rapid pace. + +It is for that reason we must keep learning, learning for some is a challenge and for those people, I urge you to find a medium that you enjoy. I have always enjoyed documenting something I learn to like this and then getting hands-on. The premise of this project is exactly that, it is about a foundational knowledge of some of the key areas of DevOps and the tooling that achieves this, you are not going to be a graduated DevOps engineer by following along but you are going to have a better understanding of terminology and getting hands-on with some technologies that maybe you do not see on a day-to-day basis. + +I also want to add that everyone is constantly evolving and learning, it doesn't matter if you are the CTO of a software company or a Systems Administrator wanting to learn more about automation, everyone is learning, and that little imposter syndrome feeling is normal. My advice is to run towards it vs running away from it and you will absolutely reap the rewards, also learn what you enjoy this makes learning more enjoyable. + +### Security focused + +For those that have been following along, you will have known that the biggest area we missed out on in the 2022 edition was security aptly named DevSecOps and how we integrate security into that infinite DevOps cycle to ensure we are always thinking about security. + +In this edition, we will be diving headfirst into the security processes and principles as it obtains to DevSecOps heavily in this version and getting to some more topics that we missed in the first round. + +### A little help from my friends + +The 2022 edition was the equivalent of writing a blog post each day. We were well over 100k words and if we were to spin this into an eBook which was an option and instructions can be found in the repository if you so wish but you would find over 700 pages of A4 paper in total. The book idea is not dead and buried and I am working on a smaller version behind the scenes that might be a nice giveaway at a conference near you along with our amazing stickers. + +Another gap for me and maybe this was the authenticity of the project as I was just starting to learn and documenting that learning journey in some of these areas. This time around I have asked some friends in the community to help. + +There are two reasons for this: + +1. I think it is important to get different perspectives across topics and also, we are all going to learn best if we hear from subject matter experts in those specific topic areas. + +2. Some of the friends that will be helping here will have the opportunity to grow their brand and potentially even speak at events about their topics and the over the project. + +You can find the 2023 authors on the opening 2023.md page with links to their bios and contact details. + +I think it is also time to be very clear about the project. Nobody is being paid to write, nobody is being paid to talk about the project. I was approached about sponsorship several times, but the premise of this project is for it to remain impartial, free and for the community. Yes, we have used some projects and products throughout but none of the companies have sponsored or had a say in what has been written. + +Finally, my employer Veeam Software, I am extremely lucky to have a company that enables me to be part of the community and document my learnings without interference. I don't work a traditional 9-5 and I am sure many people reading this do not either, but I am free to create content like this project. + +### Resources + +Throughout the project and the previous 2022 edition you will find the resources section, this is a list of content that I or my fellow authors have been through and if you want to learn more than you are reading here go and grab this content. + +You can find the 2022 edition [here](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/2022.md) + +But also some community members have been busy at work transforming and creating a new look and feel through [GitHub Pages](https://www.90daysofdevops.com/#/) + +On the [2023 page](https://www.90daysofdevops.com/#/2023) you will also find ways to interact and join the community. + +With that said let's get into things with [Day 2](day02.md). \ No newline at end of file From 0036e27a62902ae470f87076ddd471ebaa3fe5d3 Mon Sep 17 00:00:00 2001 From: Cotchi666 Date: Sat, 21 Oct 2023 18:41:28 +0700 Subject: [PATCH 04/16] TRANSLATE DAY1 DONE --- 2023/vi/days/day01.md | 56 ++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/2023/vi/days/day01.md b/2023/vi/days/day01.md index e4b476e..e94782f 100644 --- a/2023/vi/days/day01.md +++ b/2023/vi/days/day01.md @@ -6,60 +6,62 @@ Chào mọi người và mừng trở lại với phiên bản 2023 #90DaysOfDev Đầu tiên, WAO! Nhớ đến công việc này mà thôi đã nghĩ ra ở giao thừa 2021 là dành ra 90 ngày đầu của năm 2022 để học và tổng hợp tư liệu của việc học đó, ghi chú một cách cơ bản sau khi xem nhiều người cực kì giỏi hơn tôi trên Youtube. -Nhanh chóng một năm, chúng ta có khá nhiều con số ấn tượng ở dự án này, tôi nghĩ tôi đã đề cập ít nhất ở nơi đâu đó trong dự án, nhưng tôi chắc rằng tôi đã từng đề cập ở chỗ khác rất nhiều lần là bất kì nội dung nào mà giúp được thậm chí dù chỉ một người thì nó rất xứng đáng để làm, quả là đán kinh ngạc khi có được những con số như này từ khi dự án chúng ta được đánh dấu (stars) đến khi được phân nhánh copy từ người khác (folks). +Một năm nhanh chóng, chúng ta có khá nhiều con số ấn tượng ở dự án này, tôi nghĩ tôi đã đề cập ít nhất ở nơi đâu đó trong dự án, nhưng tôi chắc rằng tôi đã từng đề cập ở chỗ khác rất nhiều lần là bất kì nội dung nào mà giúp được thậm chí dù chỉ một người thì nó rất xứng đáng để làm, quả là đán kinh ngạc khi có được những con số như này từ khi dự án chúng ta được đánh dấu (stars) đến khi được phân nhánh copy từ người khác (folks). ![](images/day01-1.jpg) -Also, nearly **500** watchers of the repository! +Cũng như, gần **500** người theo dõi dự án này. -First, I want to thank everyone for sharing the repository with the community. Hearing that Microsoft and other massive tech vendors have shared this with their teams is humbling. +Điều đầu tiên, tôi muốn chân thành cảm ơn tất cả mọi người vì đã chia sẽ dự án này với cộng đồng. Thật là tuyệt với khi nghe rằng Microsoft và những nhà cung cấp công nghệ lớn khác đã chia sẽ dự án này với đội ngũ của họ. -Secondly, I would like to thank the contributors. This started out as a place to take notes and learn in public, and it wasn't until a few days in that saw people correcting my poor spelling and grammar. (I am sure the same will happen this year) But the biggest and most amazing thing was the community that started to translate the repository into their native language! How amazing to think this was happening and helping non-native English speakers learn more about the powers of DevOps. +Điều thứ hai, tôi rất muốn cảm ơn những người đã đóng góp vào dự án. Điều này đã làm nên một nới mà ta có thể ghi chép cũng như học hỏi một cách minh bạch, cho đến khi có người bắt gặp lỗi sai chính tả cũng như ngữ pháp của tôi và chỉnh nó. (Tôi chắc rằng điều tương tự sẽ diễn ra trong năm nay) Nhưng điều quan trọng và thú vị nhất là cộng đồng này đã bắt đầu phiên dịch dự án này thành ngôn ngữ bản địa của họ! Thật là tuyệt +vời khi nghĩ điều này đang đã đang diễn ra và giúp những người nói tiếng anh bản xứ học nhiều hơn về sức mạnh tuyệt vời của DevOps. ![](images/day01-2.png) -If you would like to find the amazing contributors on the repository, then you can head to the [Contributors](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/Contributors.md) +Nếu bạn muốn tìm hiểu về những người đã đóng góp vào dự án, thì bạn có thể đến với [Contributors](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/Contributors.md) -### Continuous Learning +### Tiếp tục học hỏi -I mentioned and mentioned a lot that we are never done learning, if you think you are then you picked the wrong industry as things are changing all the time and at a rapid pace. +Tôi đã đề cập và nhấn mạnh rằng việc học không bao giờ là đủ, nếu bạn cho rằng là không phải, thì bạn đã chọn sai ngành vì tất cả mọi thứ ở ngành này điều thay đổi với một tốc độ cách nhanh chóng theo thời gian. -It is for that reason we must keep learning, learning for some is a challenge and for those people, I urge you to find a medium that you enjoy. I have always enjoyed documenting something I learn to like this and then getting hands-on. The premise of this project is exactly that, it is about a foundational knowledge of some of the key areas of DevOps and the tooling that achieves this, you are not going to be a graduated DevOps engineer by following along but you are going to have a better understanding of terminology and getting hands-on with some technologies that maybe you do not see on a day-to-day basis. +Nó là lý do vì sao chúng ta phải tiếp tục học, học nữa và nó cũng chính là thử thách cho mỗi người, tôi khuyến khích bạn tìm cho mình một môi trường mà bạn cảm thấy hứng thú. Tôi đã rất say mê tổng hợp tài liệu về những thứ mà tôi học như dự án DevOps này chẳng hạn và bắt tay vào làm nó. Bước tiền đề của dự án này chính xác là nó, chính là nền tảng kiến thức cốt lõi của lĩnh vực DevOps và những công cụ giúp lãnh hội điều ấy, nếu bạn nghĩ rằng bạn sẽ tốt nghiệp và trở thành một kỹ sư DevOps khi học xong dự án này thì có lẽ sẽ không phải, nhưng việc trở nên am hiểu hơn về những thuật ngữ và sẵn sàng tiếp cận thực hành với nhiều công nghệ mà có thể trong cuộc sống hàng ngày bạn không nghĩ đến. -I also want to add that everyone is constantly evolving and learning, it doesn't matter if you are the CTO of a software company or a Systems Administrator wanting to learn more about automation, everyone is learning, and that little imposter syndrome feeling is normal. My advice is to run towards it vs running away from it and you will absolutely reap the rewards, also learn what you enjoy this makes learning more enjoyable. +Tôi cũng mong muốn rằng mọi người sẽ tiếp tục phát triển bản thân và không ngừng học hỏi, không ngoài trừ bạn là một giám đốc công nghệ (CTO) của một công ty công nghệ hay là một người điều hành hệ thống (SA) đang muốn học nhiều hơn về tự động hoá, thấy đó, tất cả mọi người đều đang học hỏi, +hay một số nhỏ nghĩ rằng điều ấy quá sức với mình (hội chứng kẻ giả mạo) nhưng điều ấy hoàn toàn bình thường bạn ạ. Lời khuyên của tôi đó là cứ tiến thẳng về phía trước, đừng nghĩ về những thứ tiêu cực như ấy và bạn sẽ chắc chắn gặt hái được nhiều thành công, cũng như học được những thứ như này giúp bạn hứng thú hơn khi học điều gì đó. -### Security focused +### Tập trung vào bảo mật -For those that have been following along, you will have known that the biggest area we missed out on in the 2022 edition was security aptly named DevSecOps and how we integrate security into that infinite DevOps cycle to ensure we are always thinking about security. +Dành cho những người đã đi suốt chặng đường cùng dự án, bạn đã biết rằng thứ quan trọng mà chúng ta bỏ lỡ trong phiên bản 2022 là bảo mật đúng hơn là DevSecOps và cách chúng ta tích hợp bảo mật vào vòng đời vô hạn của DevOps để đảm bảo rằng chúng ta luôn nghĩ về bảo mật khi nhắc đến DevOps. -In this edition, we will be diving headfirst into the security processes and principles as it obtains to DevSecOps heavily in this version and getting to some more topics that we missed in the first round. +Trong phiên bản 2023 này, chúng ta sẽ tiến thẳng vào các quy trình bảo mật, các quy tắc, bao gồm cả sự quan trọng DevSecOps và chúng ta sẽ bắt đầu với vài chủ đề mà chúng ta đã bỏ lỡ ở phần đầu. -### A little help from my friends +### Một vài sự giúp đỡ từ những người bạn của tôi -The 2022 edition was the equivalent of writing a blog post each day. We were well over 100k words and if we were to spin this into an eBook which was an option and instructions can be found in the repository if you so wish but you would find over 700 pages of A4 paper in total. The book idea is not dead and buried and I am working on a smaller version behind the scenes that might be a nice giveaway at a conference near you along with our amazing stickers. +Phiên bản 2022 giống với việc viết một bài đăng vào mỗi ngày. Chúng ta đã nỗ lực hơn 100k từ và nếu chúng ta chuẩn bị chuyển mình sang sách điện tử (eBook) là một sự lựa chọn và phần hướng dẫn có thể được tìm thấy trong dự án nếu bạn muốn nhưng bạn sẽ phải tìm hơn tổng 700 trang giấy A4. Cuốn sách điện tử này sẽ không bị lãng quên nên tôi đang chuẩn bị cho một phiên bản nhỏ hơn và có thể tôi sẽ dành tặng cho các bạn vài cuốn tại buổi hội thảo gần với bạn cùng với vài mẫu sticker độc đáo. -Another gap for me and maybe this was the authenticity of the project as I was just starting to learn and documenting that learning journey in some of these areas. This time around I have asked some friends in the community to help. +Một sự thiếu sót của tôi có thể chính là tính xác thực của dự án này khi tôi mới đang bắt đầu nghiên cứu và tổng hợp chúng cũng như hành trình học hỏi của tôi ở nhiều khía cạnh khác của dự án này. -There are two reasons for this: +Đây là hai lý do của việc ấy: -1. I think it is important to get different perspectives across topics and also, we are all going to learn best if we hear from subject matter experts in those specific topic areas. +1. Tôi nghĩ điều quan trọng để có được những quan điểm khác nhau về các chủ đề và cũng như chúng ta sẽ học hỏi một cách tốt nhất nếu nhận được những lời khuyên từ các chuyên gia đi trước về những chủ đề lĩnh vực liên quan sâu sắc. -2. Some of the friends that will be helping here will have the opportunity to grow their brand and potentially even speak at events about their topics and the over the project. +2. Một vài người bạn của tôi sẽ sẵn sàng giúp đỡ cộng đồng tiếp tục phát triển thương hiệu của họ đi lên và thậm chí diễn giả tại các sự kiện về những chủ đề của họ và có thể tiến xa hơn dự án này. -You can find the 2023 authors on the opening 2023.md page with links to their bios and contact details. +Bạn có thể tìm thấy tác gỉa của phiên bản 2023 này ở ngay phần mở đầu của trang được liên kết đến thông tin liên hệ của họ. -I think it is also time to be very clear about the project. Nobody is being paid to write, nobody is being paid to talk about the project. I was approached about sponsorship several times, but the premise of this project is for it to remain impartial, free and for the community. Yes, we have used some projects and products throughout but none of the companies have sponsored or had a say in what has been written. +Tôi nghĩ nó cũng là lúc để làm rõ ràng về dự án này. Không một ai được trả công để viết, không ai được trả để nói về dự án này cả. Tôi đã được các nhãn hàng tiếp cần vài lần, nhưng mục đích ban đầu của dự án này là đảm bảo sự công bằng, bình đẳng và vì cộng đồng. Vâng, chúng ta đã sử dụng vài dự án và sản phẩm này từ đầu đến cuối, nhưng không một công ty nào quảng cáo hoặc có ý ngỏ lời với những gì chúng tôi đã viết lên. -Finally, my employer Veeam Software, I am extremely lucky to have a company that enables me to be part of the community and document my learnings without interference. I don't work a traditional 9-5 and I am sure many people reading this do not either, but I am free to create content like this project. +Cuối cùng, sự nghiệp của tôi tại Veeam Software, tôi thật là may mắn khi có một công ty hiểu cho tôi để hoà mình vào cộng đồng và thực hiện dự án mà không can thiệp vào. Tôi không làm việc 9-5 như truyền thống và tôi chắc rằng có rất nhiều người đọc điều này thì có lẽ không giống tôi, tôi làm việc khá là tự do để tạo nên những nội dung như này. -### Resources +### Tài nguyên -Throughout the project and the previous 2022 edition you will find the resources section, this is a list of content that I or my fellow authors have been through and if you want to learn more than you are reading here go and grab this content. +Trong suốt dự án và ấn bản năm 2022 trước đó, bạn sẽ tìm thấy phần tài nguyên, đây là danh sách nội dung mà tôi hoặc các tác giả đồng nghiệp của tôi đã xem qua và nếu bạn muốn tìm hiểu thêm những nội dung bạn đang đọc tại đây, hãy truy cập nội dung này. -You can find the 2022 edition [here](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/2022.md) +Bạn có thể tìm thấy phiên bản 2022 [đây](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/2022.md) -But also some community members have been busy at work transforming and creating a new look and feel through [GitHub Pages](https://www.90daysofdevops.com/#/) +Nhưng cũng có một số thành viên cộng đồng đang bận rộn trong công việc chuyển đổi và làm ra giao diện mới thông qua [Trang GitHub](https://www.90daysofdevops.com/#/) -On the [2023 page](https://www.90daysofdevops.com/#/2023) you will also find ways to interact and join the community. +Trên [trang 2023](https://www.90daysofdevops.com/#/2023) bạn sẽ có thể tìm được nhiều cách để kết nối với cộng đồng. -With that said let's get into things with [Day 2](day02.md). \ No newline at end of file +Như đã nói ở trên, chúng ta bắt đầu với [Ngày 2](day02.md). \ No newline at end of file From fca2e1537f1dfa9b33e3a96c43386f952aaa9013 Mon Sep 17 00:00:00 2001 From: Cotchi666 Date: Sat, 21 Oct 2023 18:49:24 +0700 Subject: [PATCH 05/16] TRANSLATE DAY1 DONE --- 2023/vi/days/day01.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2023/vi/days/day01.md b/2023/vi/days/day01.md index e94782f..889a59a 100644 --- a/2023/vi/days/day01.md +++ b/2023/vi/days/day01.md @@ -4,15 +4,15 @@ Chào mọi người và mừng trở lại với phiên bản 2023 #90DaysOfDev ### Tóm tắt 2022 -Đầu tiên, WAO! Nhớ đến công việc này mà thôi đã nghĩ ra ở giao thừa 2021 là dành ra 90 ngày đầu của năm 2022 để học và tổng hợp tư liệu của việc học đó, ghi chú một cách cơ bản sau khi xem nhiều người cực kì giỏi hơn tôi trên Youtube. +Đầu tiên, WAO! Nhớ đến công việc này mà tôi đã nghĩ ra ở giao thừa 2021 là dành ra 90 ngày đầu của năm 2022 để học và tổng hợp tư liệu, ghi chú một cách cơ bản sau khi xem nhiều người cực kì giỏi hơn tôi trên Youtube. -Một năm nhanh chóng, chúng ta có khá nhiều con số ấn tượng ở dự án này, tôi nghĩ tôi đã đề cập ít nhất ở nơi đâu đó trong dự án, nhưng tôi chắc rằng tôi đã từng đề cập ở chỗ khác rất nhiều lần là bất kì nội dung nào mà giúp được thậm chí dù chỉ một người thì nó rất xứng đáng để làm, quả là đán kinh ngạc khi có được những con số như này từ khi dự án chúng ta được đánh dấu (stars) đến khi được phân nhánh copy từ người khác (folks). +Một năm nhanh chóng, chúng ta có khá nhiều con số ấn tượng ở dự án này, tôi nghĩ tôi đã đề cập ít nhất ở nơi đâu đó trong dự án, nhưng tôi chắc rằng tôi đã từng đề cập ở chỗ khác rất nhiều lần là bất kì nội dung nào mà giúp được thậm chí dù chỉ một người thì nó rất xứng đáng để làm, quả là đáng kinh ngạc khi có được những con số như này từ khi dự án chúng ta được đánh dấu (stars) đến khi được phân nhánh copy từ người khác (folks). ![](images/day01-1.jpg) Cũng như, gần **500** người theo dõi dự án này. -Điều đầu tiên, tôi muốn chân thành cảm ơn tất cả mọi người vì đã chia sẽ dự án này với cộng đồng. Thật là tuyệt với khi nghe rằng Microsoft và những nhà cung cấp công nghệ lớn khác đã chia sẽ dự án này với đội ngũ của họ. +Điều đầu tiên, tôi muốn chân thành cảm ơn tất cả mọi người vì đã chia sẻ dự án này với cộng đồng. Thật là tuyệt với khi nghe rằng Microsoft và những nhà cung cấp công nghệ lớn khác đã chia sẻ dự án này với đội ngũ của họ. Điều thứ hai, tôi rất muốn cảm ơn những người đã đóng góp vào dự án. Điều này đã làm nên một nới mà ta có thể ghi chép cũng như học hỏi một cách minh bạch, cho đến khi có người bắt gặp lỗi sai chính tả cũng như ngữ pháp của tôi và chỉnh nó. (Tôi chắc rằng điều tương tự sẽ diễn ra trong năm nay) Nhưng điều quan trọng và thú vị nhất là cộng đồng này đã bắt đầu phiên dịch dự án này thành ngôn ngữ bản địa của họ! Thật là tuyệt vời khi nghĩ điều này đang đã đang diễn ra và giúp những người nói tiếng anh bản xứ học nhiều hơn về sức mạnh tuyệt vời của DevOps. From 21bb5786b65ec44a32d057aa806bd2eda9edbb30 Mon Sep 17 00:00:00 2001 From: Cotchi666 Date: Sat, 21 Oct 2023 18:55:14 +0700 Subject: [PATCH 06/16] FIX SPELLING --- 2023/vi/2023.md | 2 +- 2023/vi/days/day01.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/2023/vi/2023.md b/2023/vi/2023.md index 563016d..72b9f5f 100644 --- a/2023/vi/2023.md +++ b/2023/vi/2023.md @@ -36,7 +36,7 @@ Hoặc liên hệ chúng tôi trên Twitter, tên hay gọi của tôi là [@Mic ## Progress -- [✔️] ♾️ 1 > [2022 Reflection & Welcome 2023](2023/day01.md) +- [✔️] ♾️ 1 > [Nhìn lại 2022 & Chào đón 2023](2023/day01.md) ### DevSecOps diff --git a/2023/vi/days/day01.md b/2023/vi/days/day01.md index 889a59a..043d8aa 100644 --- a/2023/vi/days/day01.md +++ b/2023/vi/days/day01.md @@ -1,4 +1,4 @@ -## Nhỉn lại 2022 & Chào đón 2023 +## Nhìn lại 2022 & Chào đón 2023 Chào mọi người và mừng trở lại với phiên bản 2023 #90DaysOfDevOps trong bài đăng Ngày 1 này, kế hoạch là nhìn lại phiên bản năm 2022, một vài thống kê, phản hồi và những ý tưởng mà chúng ta đã có trong suốt năm qua. From 47e8967b6ee25eda5020a93695ba269fe6a6ed46 Mon Sep 17 00:00:00 2001 From: "yuri.ji" Date: Sun, 22 Oct 2023 22:17:39 +0900 Subject: [PATCH 07/16] Typo --- 2023/ko/days/day15.md | 4 +--- 2023/ko/days/day16.md | 2 +- 2023/ko/days/day17.md | 6 +++--- 2023/ko/days/day19.md | 7 +------ 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/2023/ko/days/day15.md b/2023/ko/days/day15.md index d03d304..5ea2145 100644 --- a/2023/ko/days/day15.md +++ b/2023/ko/days/day15.md @@ -151,14 +151,12 @@ SBOM에는 컨테이너 이미지 내부에 설치된 패키지와 라이브러 일반적으로 이 취약점이 도입된 라이브러리 버전과 최신 버전에서 취약점이 수정되었는지 여부에 대한 정보도 찾을 수 있습니다. 이 정보를 사용하여 취약점을 완화하기 위해 종속성을 업데이트/다운그레이드할지 여부를 결정할 수 있습니다. -14일차](./day14.md)에서 이미 설명했듯이, 종속성 업데이트에는 동작 또는 API 변경이 수반되는 경우가 있기 때문에 종속성을 업데이트하는 것이 항상 간단한 것은 아닙니다. +[14일차](./day14.md)에서 이미 설명했듯이, 종속성 업데이트에는 동작 또는 API 변경이 수반되는 경우가 있기 때문에 종속성을 업데이트하는 것이 항상 간단한 것은 아닙니다. 취약점에 대한 또 다른 중요한 정보는 취약점의 **CVSS 점수**입니다. ## CVSS -## CVSS - **CVSS**는 **C**ommon **V**ulnerability **S**coring **S**ystem의 약자입니다. 이 시스템은 취약점의 주요 특성을 파악하고 그 심각성을 반영하는 수치 점수를 생성하는 방법을 제공합니다. diff --git a/2023/ko/days/day16.md b/2023/ko/days/day16.md index 394cee3..321c158 100644 --- a/2023/ko/days/day16.md +++ b/2023/ko/days/day16.md @@ -77,7 +77,7 @@ func DontPanic(s input) { 이런 경우 퍼징은 아무런 단서 없이 정확한 문자열 `퍼즈`를 생성할 가능성이 적기 때문에 도움이 되지 않습니다. 그리고 이전 사례에서 코드 커버리지 변경을 트리거했던 입력(크기 4의 문자열, `z`로 시작하는 크기 4의 문자열 등)은 이제 코드 커버리지를 트리거하지 않습니다. (이전 예제에서는 `if` 체크가 5개인데 비해 지금은 하나만 있기 때문입니다) -So it's important to understand that while fuzzing is a good way to detect anomalies and corner-cases in your code it is not a silver-bullet for 100% correct code. +따라서 퍼징은 코드의 이상 징후와 코너 케이스를 감지하는 좋은 방법이지만 100% 올바른 코드를 위한 만병통치약은 아니라는 점을 이해하는 것이 중요합니다. ## 실제 예제 diff --git a/2023/ko/days/day17.md b/2023/ko/days/day17.md index 233bd5b..36cd71e 100644 --- a/2023/ko/days/day17.md +++ b/2023/ko/days/day17.md @@ -214,10 +214,10 @@ httpfuzz: log.go:15: Got 200 response from the server httpfuzz: log.go:15: Got 200 response from the server ``` -Voila! -Now we can at least see what the response code from the server was. +짜잔! +이제 최소한 서버의 응답 코드가 무엇인지 확인할 수 있습니다. -Of course, we can write much more sophisticated plugins that output much more data, but for the purpose of this exercise, that is enough. +물론 훨씬 더 많은 데이터를 출력하는 훨씬 더 정교한 플러그인을 작성할 수도 있지만, 이 연습의 목적상 이 정도면 충분합니다. ## 요약 diff --git a/2023/ko/days/day19.md b/2023/ko/days/day19.md index 990dd05..5227df1 100644 --- a/2023/ko/days/day19.md +++ b/2023/ko/days/day19.md @@ -1,18 +1,13 @@ # IAST (Interactive Application Security Testing) - IAST는 웹 애플리케이션의 취약점을 식별하고 개발자가 이를 수정할 수 있도록 설계된 보안 테스트 도구의 일종입니다. 이 도구는 애플리케이션의 런타임 환경에 작은 에이전트를 삽입하고 실시간으로 동작을 모니터링하는 방식으로 작동합니다. 따라서 IAST 도구는 정적 분석이나 모의 공격에 의존하지 않고 취약점이 발생할 때 이를 식별할 수 있습니다. - instrumentation - IAST는 소프트웨어 계측(software instrumentation) 또는 계측기를 사용하여 애플리케이션이 실행되는 동안 모니터링하고 애플리케이션이 수행하는 작업과 성능에 대한 정보를 수집하는 방식으로 작동합니다. IAST 솔루션은 실행 중인 애플리케이션에 에이전트와 센서를 배포하고 수동 테스트, 자동 테스트 또는 이 둘의 조합으로 시작된 모든 애플리케이션 상호 작용을 지속적으로 분석하여 실시간으로 취약성을 식별함으로써 애플리케이션을 계측합니다. IAST 에이전트는 애플리케이션 내부에서 실행되며 알려진 공격 패턴을 모니터링합니다. 애플리케이션의 일부이므로 서로 다른 구성 요소 간의 트래픽을 모니터링할 수 있습니다. (클래식 MVC 배포 및 마이크로서비스 배포 간) ## IAST의 전제조건 - -- 애플리케이션을 계측해야 합니다. (Agent를 주입해야 함. +- 애플리케이션을 계측해야 합니다. (Agent를 주입해야 함.) - 수동 또는 자동 테스트를 통해 트래픽을 생성해야 합니다. 또 다른 가능한 접근 방식은 DAST 도구를 사용하는 것입니다. (예를 들어 OWASP ZAP을 사용할 수 있음) - ## 장점 IAST 도구의 주요 장점 중 하나는 취약점과 취약점 수정 방법에 대한 상세하고 정확한 정보를 제공할 수 있다는 것입니다. 개발자가 수동으로 취약점을 검색하거나 테스트 환경에서 취약점을 재현할 필요가 없으므로 많은 시간과 노력을 절약할 수 있습니다. From 183d0382a6db669a4805a2ef8011fb0b5210f089 Mon Sep 17 00:00:00 2001 From: Aleg Malinovsky <6178232+alegmal@users.noreply.github.com> Date: Mon, 23 Oct 2023 00:59:40 +0300 Subject: [PATCH 08/16] fixed a typo on day77.md sneaky 'm' --- 2023/day77.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2023/day77.md b/2023/day77.md index 0df8ba2..073f8db 100644 --- a/2023/day77.md +++ b/2023/day77.md @@ -9,7 +9,7 @@ These are small subset of challenges when it comes to running and managing appli Enter a Service Mesh. A Service Mesh is an application network layer that handles service-to-service communication, by providing a layer for granular traffic control, AuthN, AuthZ, and observability. -### What are the challenges a Service Mesh aims to solve?m +### What are the challenges a Service Mesh aims to solve? 1. Unreliable and changing networks that are complex, while having to adapt while your microservices scale 2. Ensuring a near zero-trust like environment where, RBAC, AuthZ and AuthN are critical. 3. Ensuring a data-loss prevention approach using encryption and traffic filtration techniques From bc69851b846d0354b8723c394e48ce43e2bec093 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Mon, 23 Oct 2023 10:08:13 +0200 Subject: [PATCH 09/16] Editing 2024.md --- 2024.md | 58 ++++++++------------------------------------------------- 1 file changed, 8 insertions(+), 50 deletions(-) diff --git a/2024.md b/2024.md index f82406c..8c15923 100644 --- a/2024.md +++ b/2024.md @@ -20,20 +20,14 @@ If you have questions and want to get involved then join the discord and share y Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/MichaelCade1) you can find the authors for 2023 also on Twitter linked below. -## Progress +## Agenda - [] ♾️ 1 > [](2024/day01.md) - -### - - [] ♾️ 2 > [](2024/day02.md) - [] ♾️ 3 > [](2024/day03.md) - [] ♾️ 4 > [](2024/day04.md) - [] ♾️ 5 > [](2024/day05.md) - [] ♾️ 6 > [](2024/day06.md) - -### - - [] 🔐 7 > [](2024/day07.md) - [] 🔐 8 > [](2024/day08.md) - [] 🔐 9 > [](2024/day09.md) @@ -41,19 +35,13 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🔐 11 > [](2024/day11.md) - [] 🔐 12 > [](2024/day12.md) - [] 🔐 13 > [](2024/day13.md) - -### - -- [] ⚒️ > [](2024/day14.md) -- [] ⚒️ > [](2024/day15.md) -- [] ⚒️ > [](2024/day16.md) -- [] ⚒️ > [](2024/day17.md) -- [] ⚒️ > [](2024/day18.md) -- [] ⚒️ > [](2024/day19.md) -- [] ⚒️ > [](2024/day20.md) - -### - +- [] ⚒️ 14 > [](2024/day14.md) +- [] ⚒️ 15 > [](2024/day15.md) +- [] ⚒️ 16 > [](2024/day16.md) +- [] ⚒️ 17 > [](2024/day17.md) +- [] ⚒️ 18 > [](2024/day18.md) +- [] ⚒️ 19 > [](2024/day19.md) +- [] ⚒️ 20 > [](2024/day20.md) - [] 🚚 21 > [](2024/day21.md) - [] 🚚 22 > [](2024/day22.md) - [] 🚚 23 > [](2024/day23.md) @@ -61,9 +49,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🚚 25 > [](2024/day25.md) - [] 🚚 26 > [](2024/day26.md) - [] 🚚 27 > [](2024/day27.md) - -### - - [] 🏃 28 > [](2024/day28.md) - [] 🏃 29 > [](2024/day29.md) - [] 🏃 30 > [](2024/day30.md) @@ -71,9 +56,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🏃 32 > [](2024/day32.md) - [] 🏃 33 > [](2024/day33.md) - [] 🏃 34 > [](2024/day34.md) - -### - - [] 🕵 35 > [](2024/day35.md) - [] 🕵 36 > [](2024/day36.md) - [] 🕵 37 > [](2024/day37.md) @@ -81,9 +63,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🕵 39 > [](2024/day39.md) - [] 🕵 40 > [](2024/day40.md) - [] 🕵 41 > [](2024/day41.md) - -### - - [] 🐍 42 > [](2024/day42.md) - [] 🐍 43 > [](2024/day43.md) - [] 🐍 44 > [](2024/day44.md) @@ -91,9 +70,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🐍 46 > [](2024/day46.md) - [] 🐍 47 > [](2024/day47.md) - [] 🐍 48 > [](2024/day48.md) - -### - - [] ☁️ 49 > [](2024/day49.md) - [] ☁️ 50 > [](2024/day50.md) - [] ☁️ 51 > [](2024/day51.md) @@ -101,9 +77,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] ☁️ 53 > [](2024/day53.md) - [] ☁️ 54 > [](2024/day54.md) - [] ☁️ 55 > [](2024/day55.md) - -### - - [] ⛑️ 56 > [](2024/day56.md) - [] ⛑️ 57 > [](2024/day57.md) - [] ⛑️ 58 > [](2024/day58.md) @@ -111,9 +84,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] ⛑️ 60 > [](2024/day60.md) - [] ⛑️ 61 > [](2024/day61.md) - [] ⛑️ 62 > [](2024/day62.md) - -### - - [] 🛢 63 > [](2024/day63.md) - [] 🛢 64 > [](2024/day64.md) - [] 🛢 65 > [](2024/day65.md) @@ -121,9 +91,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🛢 67 > [](2024/day67.md) - [] 🛢 68 > [](2024/day68.md) - [] 🛢 69 > [](2024/day69.md) - -### - - [] 👩🏿‍💻 70 > [](2024/day70.md) - [] 👩🏿‍💻 71 > [](2024/day71.md) - [] 👩🏿‍💻 72 > [](2024/day72.md) @@ -131,9 +98,6 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 👩🏿‍💻 74 > [](2024/day74.md) - [] 👩🏿‍💻 75 > [](2024/day75.md) - [] 👩🏿‍💻 76 > [](2024/day76.md) - -### - - [] 🧩 77 > [](2024/day77.md) - [] 🧩 78 > [](2024/day78.md) - [] 🧩 79 > [](2024/day79.md) @@ -141,16 +105,10 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [] 🧩 81 > [](2024/day81.md) - [] 🧩 82 > [](2024/day82.md) - [] 🧩 83 > [](2024/day83.md) - -### - - - [] 👷🏻‍♀️ 84 > [](2024/day84.md) - [] 👷🏻‍♀️ 85 > [](2024/day85.md) - [] 👷🏻‍♀️ 86 > [](2024/day86.md) - [] 👷🏻‍♀️ 87 > [](2024/day87.md) - [] 👷🏻‍♀️ 88 > [](2024/day88.md) - [] 👷🏻‍♀️ 89 > [](2024/day89.md) - -### - [] 🏁 90 > [](2024/day90.md) From ac69ec0704919911eb2c6132b08fb9a7d8768ac2 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Mon, 23 Oct 2023 10:34:01 +0200 Subject: [PATCH 10/16] Adding a rough agenda to 2024 --- 2024.md | 182 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 92 insertions(+), 90 deletions(-) diff --git a/2024.md b/2024.md index 8c15923..4559aa0 100644 --- a/2024.md +++ b/2024.md @@ -22,93 +22,95 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich ## Agenda -- [] ♾️ 1 > [](2024/day01.md) -- [] ♾️ 2 > [](2024/day02.md) -- [] ♾️ 3 > [](2024/day03.md) -- [] ♾️ 4 > [](2024/day04.md) -- [] ♾️ 5 > [](2024/day05.md) -- [] ♾️ 6 > [](2024/day06.md) -- [] 🔐 7 > [](2024/day07.md) -- [] 🔐 8 > [](2024/day08.md) -- [] 🔐 9 > [](2024/day09.md) -- [] 🔐 10 > [](2024/day10.md) -- [] 🔐 11 > [](2024/day11.md) -- [] 🔐 12 > [](2024/day12.md) -- [] 🔐 13 > [](2024/day13.md) -- [] ⚒️ 14 > [](2024/day14.md) -- [] ⚒️ 15 > [](2024/day15.md) -- [] ⚒️ 16 > [](2024/day16.md) -- [] ⚒️ 17 > [](2024/day17.md) -- [] ⚒️ 18 > [](2024/day18.md) -- [] ⚒️ 19 > [](2024/day19.md) -- [] ⚒️ 20 > [](2024/day20.md) -- [] 🚚 21 > [](2024/day21.md) -- [] 🚚 22 > [](2024/day22.md) -- [] 🚚 23 > [](2024/day23.md) -- [] 🚚 24 > [](2024/day24.md) -- [] 🚚 25 > [](2024/day25.md) -- [] 🚚 26 > [](2024/day26.md) -- [] 🚚 27 > [](2024/day27.md) -- [] 🏃 28 > [](2024/day28.md) -- [] 🏃 29 > [](2024/day29.md) -- [] 🏃 30 > [](2024/day30.md) -- [] 🏃 31 > [](2024/day31.md) -- [] 🏃 32 > [](2024/day32.md) -- [] 🏃 33 > [](2024/day33.md) -- [] 🏃 34 > [](2024/day34.md) -- [] 🕵 35 > [](2024/day35.md) -- [] 🕵 36 > [](2024/day36.md) -- [] 🕵 37 > [](2024/day37.md) -- [] 🕵 38 > [](2024/day38.md) -- [] 🕵 39 > [](2024/day39.md) -- [] 🕵 40 > [](2024/day40.md) -- [] 🕵 41 > [](2024/day41.md) -- [] 🐍 42 > [](2024/day42.md) -- [] 🐍 43 > [](2024/day43.md) -- [] 🐍 44 > [](2024/day44.md) -- [] 🐍 45 > [](2024/day45.md) -- [] 🐍 46 > [](2024/day46.md) -- [] 🐍 47 > [](2024/day47.md) -- [] 🐍 48 > [](2024/day48.md) -- [] ☁️ 49 > [](2024/day49.md) -- [] ☁️ 50 > [](2024/day50.md) -- [] ☁️ 51 > [](2024/day51.md) -- [] ☁️ 52 > [](2024/day52.md) -- [] ☁️ 53 > [](2024/day53.md) -- [] ☁️ 54 > [](2024/day54.md) -- [] ☁️ 55 > [](2024/day55.md) -- [] ⛑️ 56 > [](2024/day56.md) -- [] ⛑️ 57 > [](2024/day57.md) -- [] ⛑️ 58 > [](2024/day58.md) -- [] ⛑️ 59 > [](2024/day59.md) -- [] ⛑️ 60 > [](2024/day60.md) -- [] ⛑️ 61 > [](2024/day61.md) -- [] ⛑️ 62 > [](2024/day62.md) -- [] 🛢 63 > [](2024/day63.md) -- [] 🛢 64 > [](2024/day64.md) -- [] 🛢 65 > [](2024/day65.md) -- [] 🛢 66 > [](2024/day66.md) -- [] 🛢 67 > [](2024/day67.md) -- [] 🛢 68 > [](2024/day68.md) -- [] 🛢 69 > [](2024/day69.md) -- [] 👩🏿‍💻 70 > [](2024/day70.md) -- [] 👩🏿‍💻 71 > [](2024/day71.md) -- [] 👩🏿‍💻 72 > [](2024/day72.md) -- [] 👩🏿‍💻 73 > [](2024/day73.md) -- [] 👩🏿‍💻 74 > [](2024/day74.md) -- [] 👩🏿‍💻 75 > [](2024/day75.md) -- [] 👩🏿‍💻 76 > [](2024/day76.md) -- [] 🧩 77 > [](2024/day77.md) -- [] 🧩 78 > [](2024/day78.md) -- [] 🧩 79 > [](2024/day79.md) -- [] 🧩 80 > [](2024/day80.md) -- [] 🧩 81 > [](2024/day81.md) -- [] 🧩 82 > [](2024/day82.md) -- [] 🧩 83 > [](2024/day83.md) -- [] 👷🏻‍♀️ 84 > [](2024/day84.md) -- [] 👷🏻‍♀️ 85 > [](2024/day85.md) -- [] 👷🏻‍♀️ 86 > [](2024/day86.md) -- [] 👷🏻‍♀️ 87 > [](2024/day87.md) -- [] 👷🏻‍♀️ 88 > [](2024/day88.md) -- [] 👷🏻‍♀️ 89 > [](2024/day89.md) -- [] 🏁 90 > [](2024/day90.md) +## Agenda + +- [x] ♾️ 1 > [](2024/day01.md) +- [ ] ♾️ 2 > [The Digital Factory - Romano Roth](2024/day02.md) +- [ ] ♾️ 3 > [High-performing engineering teams and the Holy Grail - Jeremy Meiss](2024/day03.md) +- [ ] ♾️ 4 > [Manage Kubernetes Add-Ons for Multiple Clusters Using Cluster Run-Time State - Gianluca Mardente](2024/day04.md) +- [ ] ♾️ 5 > [Cross-functional empathy - Chris Kranz](2024/day05.md) +- [ ] ♾️ 6 > [DevSecOps - Defined, Explained & Explored - Sameer Paradkar](2024/day06.md) +- [ ] ♾️ 7 > [Advanced Code Coverage with Jenkins and API Mocking - Oleg Nenashev](2024/day07.md) +- [ ] ♾️ 8 > [Azure ARM now got Bicep - Tushar Kumar](2024/day08.md) +- [ ] ♾️ 9 > [GitOps: The next Frontier in DevOps! - Megha Kadur](2024/day09.md) +- [ ] ♾️ 10 > [Is Kubernetes Too Complicated? No, And Here's Why - Julia Furst](2024/day10.md) +- [ ] ♾️ 11 > [](2024/day11.md) +- [ ] ♾️ 12 > [Container Security for Enterprise Kubernetes environments - Imran Roshan](2024/day12.md) +- [ ] ♾️ 13 > [Automate like a pro: Dealing with test automation hassles (with real project examples) - Mesut Durukal](2024/day13.md) +- [ ] ♾️ 14 > [Navigating Cloud-Native DevOps: Strategies for Seamless Deployment - Yhorby Matias](2024/day14.md) +- [ ] ♾️ 15 > [Building Resilience: A Journey of Crafting and Validating Our Disaster Recovery Plan - Yedidya Schwartz](2024/day15.md) +- [ ] ♾️ 16 > [Distracted Development - Josh Ether](2024/day16.md) +- [ ] ♾️ 17 > [Know your data: The Stats behind the Alerts - Dave McAllister](2024/day17.md) +- [ ] ♾️ 18 > [Continuous Delivery: From Distributed Monolith to Microservices as a unit of deployment - Naresh Waswani](2024/day18.md) +- [ ] ♾️ 19 > [An introduction to API Security in Kubernetes - Geoff Burke](2024/day19.md) +- [ ] ♾️ 20 > [](2024/day20.md) +- [ ] ♾️ 21 > [Smarter, Better, Faster, Stronger - Testing at Scale - Ada Lündhé](2024/day21.md) +- [ ] ♾️ 22 > [Test in Production with Kubernetes and Telepresence - Mohammad-Ali A'râbi](2024/day22.md) +- [ ] ♾️ 23 > [SQL Server 2022 on Linux Containers and Kubernetes from Zero to a Hero! - Yitzhak David](2024/day23.md) +- [ ] ♾️ 24 > [From Chaos to Resilience: Decoding the Secrets of Production Readiness - Alejandro Pedraza Borrero](2024/day24.md) +- [ ] ♾️ 25 > [Kube-Nation: Exploring the Land of Kubernetes - Siddhant Khisty & Aakansha Priya](2024/day25.md) +- [ ] ♾️ 26 > [Platform Engineering Is Not About Tech - Nicolò Cambiaso Erizzo & Francesca Carta](2024/day26.md) +- [ ] ♾️ 27 > [Automating cloud infrastructure with Ansible - Soumyadip Chowdhury](2024/day27.md) +- [ ] ♾️ 28 > [](2024/day28.md) +- [ ] ♾️ 29 > [The Reverse Technology Thrust - Rom Adams](2024/day29.md) +- [ ] ♾️ 30 > [How GitHub delivers GitHub using GitHub - April Edwards](2024/day30.md) +- [ ] ♾️ 31 > [DevSecOps: Integrating Security into the DevOps Pipeline - Reda Hajjami](2024/day31.md) +- [ ] ♾️ 32 > [Cracking Cholera’s Code: Victorian Insights for Today’s Technologist - Simon Copsey](2024/day32.md) +- [ ] ♾️ 33 > [Building Efficient and Secure Docker Images with Multi-Stage Builds - Pradumna V Saraf](2024/day33.md) +- [ ] ♾️ 34 > [How to Implement Automated Deployment Pipelines for Your DevOps Projects - Neel Shah](2024/day34.md) +- [ ] ♾️ 35 > [Using code dependency analysis to decide what to test - Patrick Kusebauch](2024/day35.md) +- [ ] ♾️ 36 > [Exploring Firecracker - Irine Kokilashvili](2024/day36.md) +- [ ] ♾️ 37 > [Practical introduction to OpenTelemetry tracing - Nicolas Fränkel](2024/day37.md) +- [ ] ♾️ 38 > [](2024/day38.md) +- [ ] ♾️ 39 > [](2024/day39.md) +- [ ] ♾️ 40 > [Infrastructure as Code - A look at Azure Bicep and Terraform - Sarah Lean](2024/day40.md) +- [ ] ♾️ 41 > [Building Scalable Infrastructure For Advanced Air Mobility - Dan Lambeth](2024/day41.md) +- [ ] ♾️ 42 > [The North Star: Risk-driven security - Jonny Tyers](2024/day42.md) +- [ ] ♾️ 43 > [End to End Data Governance using AWS Serverless Stack - Ankit Sheth](2024/day43.md) +- [ ] ♾️ 44 > [The Lean DevOps Playbook: Make it a success from Day one - Aman Sharma](2024/day44.md) +- [ ] ♾️ 45 > [Microsoft DevOps Solutions or how to integrate the best of Azure DevOps and GitHub - Peter De Tender](2024/day45.md) +- [ ] ♾️ 46 > [Mastering AWS Systems Manager: Simplifying Infrastructure Management - Adit Modi](2024/day46.md) +- [ ] ♾️ 47 > [From Puddings to Platforms: Bringing Ideas to life with ChatGPT - Anthony Spiteri](2024/day47.md) +- [ ] ♾️ 48 > [Azure logic app, low / no code - Ian Engelbrecht](2024/day48.md) +- [ ] ♾️ 49 > [Enhancing DevOps with MLOps for GenAI and AI-Powered Solutions - Azhar Amir](2024/day49.md) +- [ ] ♾️ 50 > [](2024/day50.md) +- [ ] ♾️ 51 > [PCI Compliance in the Cloud - Barinua Kane](2024/day51.md) +- [ ] ♾️ 52 > [Multi-Model Databases and its place in DevOps - Pratim Bhosale](2024/day52.md) +- [ ] ♾️ 53 > [Implementing SRE (Site Reliability Engineering) - Andy Babiec](2024/day53.md) +- [ ] ♾️ 54 > [Let's go sidecarless in Ambient Mesh! - Leon Nunes](2024/day54.md) +- [ ] ♾️ 55 > [](2024/day55.md) +- [ ] ♾️ 56 > [Automated database deployment within the DevOps process - Marc Müller](2024/day56.md) +- [ ] ♾️ 57 > [Multi-Cloud Service Discovery and Load Balancing - Vladislav Bilay](2024/day57.md) +- [ ] ♾️ 58 > [OSV Scanner: A Powerful Tool for Open Source Security - Paras Mamgain](2024/day58.md) +- [ ] ♾️ 59 > [Continuous Delivery pipelines for cloud infrastructure - Michael Lihs](2024/day59.md) +- [ ] ♾️ 60 > [Migrating a monolith to Cloud-Native and the stumbling blocks that you don’t know about - JJ Asghar](2024/day60.md) +- [ ] ♾️ 61 > [Demystifying Modernisation: True Potential of Cloud Technology - Anupam Phoghat](2024/day61.md) +- [ ] ♾️ 62 > [Chatbots are going to destroy infrastructures and your cloud bills - Stanislas Girard](2024/day62.md) +- [ ] ♾️ 63 > [Introduction to Database Operators for Kubernetes - Juarez Junior](2024/day63.md) +- [ ] ♾️ 64 > [The Invisible Guardians: Unveiling the Power of Monitoring and Observability in the Digital Age - Santosh Kumar Perumal](2024/day64.md) +- [ ] ♾️ 65 > [Azure pertinent DevOps for non-coders - Sucheta Gawade](2024/day65.md) +- [ ] ♾️ 66 > [A Developer's Journey to the DevOps: The Synergy of Two Worlds - Jonah Andersson](2024/day66.md) +- [ ] ♾️ 67 > [Art of DevOps: Harmonizing Code, Culture, and Continuous Delivery - Rohit Ghumare](2024/day67.md) +- [ ] ♾️ 68 > [Service Mesh for Kubernetes 101: The Secret Sauce to Effortless Microservices Management - Mohd Imran](2024/day68.md) +- [ ] ♾️ 69 > [Enhancing Kubernetes security, visibility, and networking control logic - Dean Lewis](2024/day69.md) +- [ ] ♾️ 70 > [Simplified Cloud Adoption with Microsoft's Terraforms Azure Landing Zone Module - Simone Bennett](2024/day70.md) +- [ ] ♾️ 71 > [Azure for DevSecOps Operators - Kevin Evans](2024/day71.md) +- [ ] ♾️ 72 > [Infrastructure as Code with Pulumi - Scott Lowe](2024/day72.md) +- [ ] ♾️ 73 > [E2E Test Before Merge - Natalie Lunbeck](2024/day73.md) +- [ ] ♾️ 74 > [Workload Identity Federation with Azure DevOps and Terraform - Arindam Mitra](2024/day74.md) +- [ ] ♾️ 75 > [Achieving Regulatory Compliance in Multi-Cloud Deployments with Terraform - Eric Evans](2024/day75.md) +- [ ] ♾️ 76 > [All you need to know about AWS CDK. - Amogha Kancharla](2024/day76.md) +- [ ] ♾️ 77 > [](2024/day77.md) +- [ ] ♾️ 78 > [](2024/day78.md) +- [ ] ♾️ 79 > [](2024/day79.md) +- [ ] ♾️ 80 > [Unlocking K8s Troubleshooting Best Practices with Botkube - Maria Ashby](2024/day80.md) +- [ ] ♾️ 81 > [](2024/day81.md) +- [ ] ♾️ 82 > [](2024/day82.md) +- [ ] ♾️ 83 > [](2024/day83.md) +- [ ] ♾️ 84 > [](2024/day84.md) +- [ ] ♾️ 85 > [](2024/day85.md) +- [ ] ♾️ 86 > [](2024/day86.md) +- [ ] ♾️ 87 > [](2024/day87.md) +- [ ] ♾️ 88 > [](2024/day88.md) +- [ ] ♾️ 89 > [](2024/day89.md) +- [ ] ♾️ 90 > [](2024/day90.md) From 1d777cb252854607e88dfeb946f198fa814c03c3 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Mon, 23 Oct 2023 11:17:55 +0200 Subject: [PATCH 11/16] Updated 2024 readme with speakers outside of the hyperlink --- 2024.md | 160 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/2024.md b/2024.md index 4559aa0..9441823 100644 --- a/2024.md +++ b/2024.md @@ -24,86 +24,86 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich ## Agenda -- [x] ♾️ 1 > [](2024/day01.md) -- [ ] ♾️ 2 > [The Digital Factory - Romano Roth](2024/day02.md) -- [ ] ♾️ 3 > [High-performing engineering teams and the Holy Grail - Jeremy Meiss](2024/day03.md) -- [ ] ♾️ 4 > [Manage Kubernetes Add-Ons for Multiple Clusters Using Cluster Run-Time State - Gianluca Mardente](2024/day04.md) -- [ ] ♾️ 5 > [Cross-functional empathy - Chris Kranz](2024/day05.md) -- [ ] ♾️ 6 > [DevSecOps - Defined, Explained & Explored - Sameer Paradkar](2024/day06.md) -- [ ] ♾️ 7 > [Advanced Code Coverage with Jenkins and API Mocking - Oleg Nenashev](2024/day07.md) -- [ ] ♾️ 8 > [Azure ARM now got Bicep - Tushar Kumar](2024/day08.md) -- [ ] ♾️ 9 > [GitOps: The next Frontier in DevOps! - Megha Kadur](2024/day09.md) -- [ ] ♾️ 10 > [Is Kubernetes Too Complicated? No, And Here's Why - Julia Furst](2024/day10.md) -- [ ] ♾️ 11 > [](2024/day11.md) -- [ ] ♾️ 12 > [Container Security for Enterprise Kubernetes environments - Imran Roshan](2024/day12.md) -- [ ] ♾️ 13 > [Automate like a pro: Dealing with test automation hassles (with real project examples) - Mesut Durukal](2024/day13.md) -- [ ] ♾️ 14 > [Navigating Cloud-Native DevOps: Strategies for Seamless Deployment - Yhorby Matias](2024/day14.md) -- [ ] ♾️ 15 > [Building Resilience: A Journey of Crafting and Validating Our Disaster Recovery Plan - Yedidya Schwartz](2024/day15.md) -- [ ] ♾️ 16 > [Distracted Development - Josh Ether](2024/day16.md) -- [ ] ♾️ 17 > [Know your data: The Stats behind the Alerts - Dave McAllister](2024/day17.md) -- [ ] ♾️ 18 > [Continuous Delivery: From Distributed Monolith to Microservices as a unit of deployment - Naresh Waswani](2024/day18.md) -- [ ] ♾️ 19 > [An introduction to API Security in Kubernetes - Geoff Burke](2024/day19.md) -- [ ] ♾️ 20 > [](2024/day20.md) -- [ ] ♾️ 21 > [Smarter, Better, Faster, Stronger - Testing at Scale - Ada Lündhé](2024/day21.md) -- [ ] ♾️ 22 > [Test in Production with Kubernetes and Telepresence - Mohammad-Ali A'râbi](2024/day22.md) -- [ ] ♾️ 23 > [SQL Server 2022 on Linux Containers and Kubernetes from Zero to a Hero! - Yitzhak David](2024/day23.md) -- [ ] ♾️ 24 > [From Chaos to Resilience: Decoding the Secrets of Production Readiness - Alejandro Pedraza Borrero](2024/day24.md) -- [ ] ♾️ 25 > [Kube-Nation: Exploring the Land of Kubernetes - Siddhant Khisty & Aakansha Priya](2024/day25.md) -- [ ] ♾️ 26 > [Platform Engineering Is Not About Tech - Nicolò Cambiaso Erizzo & Francesca Carta](2024/day26.md) -- [ ] ♾️ 27 > [Automating cloud infrastructure with Ansible - Soumyadip Chowdhury](2024/day27.md) -- [ ] ♾️ 28 > [](2024/day28.md) -- [ ] ♾️ 29 > [The Reverse Technology Thrust - Rom Adams](2024/day29.md) -- [ ] ♾️ 30 > [How GitHub delivers GitHub using GitHub - April Edwards](2024/day30.md) -- [ ] ♾️ 31 > [DevSecOps: Integrating Security into the DevOps Pipeline - Reda Hajjami](2024/day31.md) -- [ ] ♾️ 32 > [Cracking Cholera’s Code: Victorian Insights for Today’s Technologist - Simon Copsey](2024/day32.md) -- [ ] ♾️ 33 > [Building Efficient and Secure Docker Images with Multi-Stage Builds - Pradumna V Saraf](2024/day33.md) -- [ ] ♾️ 34 > [How to Implement Automated Deployment Pipelines for Your DevOps Projects - Neel Shah](2024/day34.md) -- [ ] ♾️ 35 > [Using code dependency analysis to decide what to test - Patrick Kusebauch](2024/day35.md) -- [ ] ♾️ 36 > [Exploring Firecracker - Irine Kokilashvili](2024/day36.md) -- [ ] ♾️ 37 > [Practical introduction to OpenTelemetry tracing - Nicolas Fränkel](2024/day37.md) -- [ ] ♾️ 38 > [](2024/day38.md) -- [ ] ♾️ 39 > [](2024/day39.md) -- [ ] ♾️ 40 > [Infrastructure as Code - A look at Azure Bicep and Terraform - Sarah Lean](2024/day40.md) -- [ ] ♾️ 41 > [Building Scalable Infrastructure For Advanced Air Mobility - Dan Lambeth](2024/day41.md) -- [ ] ♾️ 42 > [The North Star: Risk-driven security - Jonny Tyers](2024/day42.md) -- [ ] ♾️ 43 > [End to End Data Governance using AWS Serverless Stack - Ankit Sheth](2024/day43.md) -- [ ] ♾️ 44 > [The Lean DevOps Playbook: Make it a success from Day one - Aman Sharma](2024/day44.md) -- [ ] ♾️ 45 > [Microsoft DevOps Solutions or how to integrate the best of Azure DevOps and GitHub - Peter De Tender](2024/day45.md) -- [ ] ♾️ 46 > [Mastering AWS Systems Manager: Simplifying Infrastructure Management - Adit Modi](2024/day46.md) -- [ ] ♾️ 47 > [From Puddings to Platforms: Bringing Ideas to life with ChatGPT - Anthony Spiteri](2024/day47.md) -- [ ] ♾️ 48 > [Azure logic app, low / no code - Ian Engelbrecht](2024/day48.md) -- [ ] ♾️ 49 > [Enhancing DevOps with MLOps for GenAI and AI-Powered Solutions - Azhar Amir](2024/day49.md) -- [ ] ♾️ 50 > [](2024/day50.md) -- [ ] ♾️ 51 > [PCI Compliance in the Cloud - Barinua Kane](2024/day51.md) -- [ ] ♾️ 52 > [Multi-Model Databases and its place in DevOps - Pratim Bhosale](2024/day52.md) -- [ ] ♾️ 53 > [Implementing SRE (Site Reliability Engineering) - Andy Babiec](2024/day53.md) -- [ ] ♾️ 54 > [Let's go sidecarless in Ambient Mesh! - Leon Nunes](2024/day54.md) -- [ ] ♾️ 55 > [](2024/day55.md) -- [ ] ♾️ 56 > [Automated database deployment within the DevOps process - Marc Müller](2024/day56.md) -- [ ] ♾️ 57 > [Multi-Cloud Service Discovery and Load Balancing - Vladislav Bilay](2024/day57.md) -- [ ] ♾️ 58 > [OSV Scanner: A Powerful Tool for Open Source Security - Paras Mamgain](2024/day58.md) -- [ ] ♾️ 59 > [Continuous Delivery pipelines for cloud infrastructure - Michael Lihs](2024/day59.md) -- [ ] ♾️ 60 > [Migrating a monolith to Cloud-Native and the stumbling blocks that you don’t know about - JJ Asghar](2024/day60.md) -- [ ] ♾️ 61 > [Demystifying Modernisation: True Potential of Cloud Technology - Anupam Phoghat](2024/day61.md) -- [ ] ♾️ 62 > [Chatbots are going to destroy infrastructures and your cloud bills - Stanislas Girard](2024/day62.md) -- [ ] ♾️ 63 > [Introduction to Database Operators for Kubernetes - Juarez Junior](2024/day63.md) -- [ ] ♾️ 64 > [The Invisible Guardians: Unveiling the Power of Monitoring and Observability in the Digital Age - Santosh Kumar Perumal](2024/day64.md) -- [ ] ♾️ 65 > [Azure pertinent DevOps for non-coders - Sucheta Gawade](2024/day65.md) -- [ ] ♾️ 66 > [A Developer's Journey to the DevOps: The Synergy of Two Worlds - Jonah Andersson](2024/day66.md) -- [ ] ♾️ 67 > [Art of DevOps: Harmonizing Code, Culture, and Continuous Delivery - Rohit Ghumare](2024/day67.md) -- [ ] ♾️ 68 > [Service Mesh for Kubernetes 101: The Secret Sauce to Effortless Microservices Management - Mohd Imran](2024/day68.md) -- [ ] ♾️ 69 > [Enhancing Kubernetes security, visibility, and networking control logic - Dean Lewis](2024/day69.md) -- [ ] ♾️ 70 > [Simplified Cloud Adoption with Microsoft's Terraforms Azure Landing Zone Module - Simone Bennett](2024/day70.md) -- [ ] ♾️ 71 > [Azure for DevSecOps Operators - Kevin Evans](2024/day71.md) -- [ ] ♾️ 72 > [Infrastructure as Code with Pulumi - Scott Lowe](2024/day72.md) -- [ ] ♾️ 73 > [E2E Test Before Merge - Natalie Lunbeck](2024/day73.md) -- [ ] ♾️ 74 > [Workload Identity Federation with Azure DevOps and Terraform - Arindam Mitra](2024/day74.md) -- [ ] ♾️ 75 > [Achieving Regulatory Compliance in Multi-Cloud Deployments with Terraform - Eric Evans](2024/day75.md) -- [ ] ♾️ 76 > [All you need to know about AWS CDK. - Amogha Kancharla](2024/day76.md) -- [ ] ♾️ 77 > [](2024/day77.md) -- [ ] ♾️ 78 > [](2024/day78.md) -- [ ] ♾️ 79 > [](2024/day79.md) -- [ ] ♾️ 80 > [Unlocking K8s Troubleshooting Best Practices with Botkube - Maria Ashby](2024/day80.md) +- [x] ♾️ 1 > [Day 1](2024/day01.md) +- [ ] ♾️ 2 > [The Digital Factory](2024/day02.md) - Romano Roth +- [ ] ♾️ 3 > [High-performing engineering teams and the Holy Grail](2024/day03.md) - Jeremy Meiss +- [ ] ♾️ 4 > [Manage Kubernetes Add-Ons for Multiple Clusters Using Cluster Run-Time State](2024/day04.md) - Gianluca Mardente +- [ ] ♾️ 5 > [Cross-functional empathy](2024/day05.md) - Chris Kranz +- [ ] ♾️ 6 > [DevSecOps - Defined, Explained & Explored](2024/day06.md) - Sameer Paradkar +- [ ] ♾️ 7 > [Advanced Code Coverage with Jenkins and API Mocking](2024/day07.md) - Oleg Nenashev +- [ ] ♾️ 8 > [Azure ARM now got Bicep](2024/day08.md) - Tushar Kumar +- [ ] ♾️ 9 > [GitOps: The next Frontier in DevOps!](2024/day09.md) - Megha Kadur +- [ ] ♾️ 10 > [Is Kubernetes Too Complicated? No, And Here's Why](2024/day10.md) - Julia Furst +- [ ] ♾️ 11 > [Day 11](2024/day11.md) +- [ ] ♾️ 12 > [Container Security for Enterprise Kubernetes environments](2024/day12.md) - Imran Roshan +- [ ] ♾️ 13 > [Automate like a pro: Dealing with test automation hassles](2024/day13.md) - Mesut Durukal +- [ ] ♾️ 14 > [Navigating Cloud-Native DevOps: Strategies for Seamless Deployment](2024/day14.md) - Yhorby Matias +- [ ] ♾️ 15 > [Building Resilience: A Journey of Crafting and Validating Our Disaster Recovery Plan](2024/day15.md) - Yedidya Schwartz +- [ ] ♾️ 16 > [Distracted Development](2024/day16.md) - Josh Ether +- [ ] ♾️ 17 > [Know your data: The Stats behind the Alerts](2024/day17.md) - Dave McAllister +- [ ] ♾️ 18 > [Continuous Delivery: From Distributed Monolith to Microservices as a unit of deployment](2024/day18.md) - Naresh Waswani +- [ ] ♾️ 19 > [An introduction to API Security in Kubernetes](2024/day19.md) - Geoff Burke +- [ ] ♾️ 20 > [Day 20](2024/day20.md) +- [ ] ♾️ 21 > [Smarter, Better, Faster, Stronger - Testing at Scale](2024/day21.md) - Ada Lündhé +- [ ] ♾️ 22 > [Test in Production with Kubernetes and Telepresence](2024/day22.md) - Mohammad-Ali A'râbi +- [ ] ♾️ 23 > [SQL Server 2022 on Linux Containers and Kubernetes from Zero to a Hero!](2024/day23.md) - Yitzhak David +- [ ] ♾️ 24 > [From Chaos to Resilience: Decoding the Secrets of Production Readiness](2024/day24.md) - Alejandro Pedraza Borrero +- [ ] ♾️ 25 > [Kube-Nation: Exploring the Land of Kubernetes](2024/day25.md) - Siddhant Khisty & Aakansha Priya +- [ ] ♾️ 26 > [Platform Engineering Is Not About Tech](2024/day26.md) - Nicolò Cambiaso Erizzo & Francesca Carta +- [ ] ♾️ 27 > [Automating cloud infrastructure with Ansible](2024/day27.md) - Soumyadip Chowdhury +- [ ] ♾️ 28 > [Day 28](2024/day28.md) +- [ ] ♾️ 29 > [The Reverse Technology Thrust](2024/day29.md) - Rom Adams +- [ ] ♾️ 30 > [How GitHub delivers GitHub using GitHub](2024/day30.md) - April Edwards +- [ ] ♾️ 31 > [DevSecOps: Integrating Security into the DevOps Pipeline](2024/day31.md) - Reda Hajjami +- [ ] ♾️ 32 > [Cracking Cholera’s Code: Victorian Insights for Today’s Technologist](2024/day32.md) - Simon Copsey +- [ ] ♾️ 33 > [Building Efficient and Secure Docker Images with Multi-Stage Builds](2024/day33.md) - Pradumna V Saraf +- [ ] ♾️ 34 > [How to Implement Automated Deployment Pipelines for Your DevOps Projects](2024/day34.md) - Neel Shah +- [ ] ♾️ 35 > [Using code dependency analysis to decide what to test](2024/day35.md) - Patrick Kusebauch +- [ ] ♾️ 36 > [Exploring Firecracker](2024/day36.md) - Irine Kokilashvili +- [ ] ♾️ 37 > [Practical introduction to OpenTelemetry tracing](2024/day37.md) - Nicolas Fränkel +- [ ] ♾️ 38 > [Day 38](2024/day38.md) +- [ ] ♾️ 39 > [Day 39](2024/day39.md) +- [ ] ♾️ 40 > [Infrastructure as Code - A look at Azure Bicep and Terraform](2024/day40.md) - Sarah Lean +- [ ] ♾️ 41 > [Building Scalable Infrastructure For Advanced Air Mobility](2024/day41.md) - Dan Lambeth +- [ ] ♾️ 42 > [The North Star: Risk-driven security](2024/day42.md) - Jonny Tyers +- [ ] ♾️ 43 > [End to End Data Governance using AWS Serverless Stack](2024/day43.md) - Ankit Sheth +- [ ] ♾️ 44 > [The Lean DevOps Playbook: Make it a success from Day one](2024/day44.md) - Aman Sharma +- [ ] ♾️ 45 > [Microsoft DevOps Solutions or how to integrate the best of Azure DevOps and GitHub](2024/day45.md) - Peter De Tender +- [ ] ♾️ 46 > [Mastering AWS Systems Manager: Simplifying Infrastructure Management](2024/day46.md) - Adit Modi +- [ ] ♾️ 47 > [From Puddings to Platforms: Bringing Ideas to life with ChatGPT](2024/day47.md) - Anthony Spiteri +- [ ] ♾️ 48 > [Azure logic app, low / no code](2024/day48.md) - Ian Engelbrecht +- [ ] ♾️ 49 > [Enhancing DevOps with MLOps for GenAI and AI-Powered Solutions](2024/day49.md) - Azhar Amir +- [ ] ♾️ 50 > [Day 50](2024/day50.md) +- [ ] ♾️ 51 > [PCI Compliance in the Cloud](2024/day51.md) - Barinua Kane +- [ ] ♾️ 52 > [Multi-Model Databases and its place in DevOps](2024/day52.md) - Pratim Bhosale +- [ ] ♾️ 53 > [Implementing SRE (Site Reliability Engineering)](2024/day53.md) - Andy Babiec +- [ ] ♾️ 54 > [Let's go sidecarless in Ambient Mesh!](2024/day54.md) - Leon Nunes +- [ ] ♾️ 55 > [Day 55](2024/day55.md) +- [ ] ♾️ 56 > [Automated database deployment within the DevOps process](2024/day56.md) - Marc Müller +- [ ] ♾️ 57 > [Multi-Cloud Service Discovery and Load Balancing](2024/day57.md) - Vladislav Bilay +- [ ] ♾️ 58 > [OSV Scanner: A Powerful Tool for Open Source Security](2024/day58.md) - Paras Mamgain +- [ ] ♾️ 59 > [Continuous Delivery pipelines for cloud infrastructure](2024/day59.md) - Michael Lihs +- [ ] ♾️ 60 > [Migrating a monolith to Cloud-Native and the stumbling blocks that you don’t know about](2024/day60.md) - JJ Asghar +- [ ] ♾️ 61 > [Demystifying Modernisation: True Potential of Cloud Technology](2024/day61.md) - Anupam Phoghat +- [ ] ♾️ 62 > [Chatbots are going to destroy infrastructures and your cloud bills](2024/day62.md) - Stanislas Girard +- [ ] ♾️ 63 > [Introduction to Database Operators for Kubernetes](2024/day63.md) - Juarez Junior +- [ ] ♾️ 64 > [The Invisible Guardians: Unveiling the Power of Monitoring and Observability in the Digital Age](2024/day64.md) - Santosh Kumar Perumal +- [ ] ♾️ 65 > [Azure pertinent DevOps for non-coders](2024/day65.md) - Sucheta Gawade +- [ ] ♾️ 66 > [A Developer's Journey to the DevOps: The Synergy of Two Worlds](2024/day66.md) - Jonah Andersson +- [ ] ♾️ 67 > [Art of DevOps: Harmonizing Code, Culture, and Continuous Delivery](2024/day67.md) - Rohit Ghumare +- [ ] ♾️ 68 > [Service Mesh for Kubernetes 101: The Secret Sauce to Effortless Microservices Management](2024/day68.md) - Mohd Imran +- [ ] ♾️ 69 > [Enhancing Kubernetes security, visibility, and networking control logic](2024/day69.md) - Dean Lewis +- [ ] ♾️ 70 > [Simplified Cloud Adoption with Microsoft's Terraforms Azure Landing Zone Module](2024/day70.md) - Simone Bennett +- [ ] ♾️ 71 > [Azure for DevSecOps Operators](2024/day71.md) - Kevin Evans +- [ ] ♾️ 72 > [Infrastructure as Code with Pulumi](2024/day72.md) - Scott Lowe +- [ ] ♾️ 73 > [E2E Test Before Merge](2024/day73.md) - Natalie Lunbeck +- [ ] ♾️ 74 > [Workload Identity Federation with Azure DevOps and Terraform](2024/day74.md) - Arindam Mitra +- [ ] ♾️ 75 > [Achieving Regulatory Compliance in Multi-Cloud Deployments with Terraform](2024/day75.md) - Eric Evans +- [ ] ♾️ 76 > [All you need to know about AWS CDK.](2024/day76.md) - Amogha Kancharla +- [ ] ♾️ 77 > [Day 77](2024/day77.md) +- [ ] ♾️ 78 > [Day 78](2024/day78.md) +- [ ] ♾️ 79 > [Day 79](2024/day79.md) +- [ ] ♾️ 80 > [Unlocking K8s Troubleshooting Best Practices with Botkube](2024/day80.md) - Maria Ashby - [ ] ♾️ 81 > [](2024/day81.md) - [ ] ♾️ 82 > [](2024/day82.md) - [ ] ♾️ 83 > [](2024/day83.md) From bf253aef8d13d2301e99711f3366b687c61e69c0 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Thu, 26 Oct 2023 06:40:01 -0700 Subject: [PATCH 12/16] added session for day 20 --- 2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2024.md b/2024.md index 9441823..eea2c7f 100644 --- a/2024.md +++ b/2024.md @@ -43,7 +43,7 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 17 > [Know your data: The Stats behind the Alerts](2024/day17.md) - Dave McAllister - [ ] ♾️ 18 > [Continuous Delivery: From Distributed Monolith to Microservices as a unit of deployment](2024/day18.md) - Naresh Waswani - [ ] ♾️ 19 > [An introduction to API Security in Kubernetes](2024/day19.md) - Geoff Burke -- [ ] ♾️ 20 > [Day 20](2024/day20.md) +- [ ] ♾️ 20 > [Kunal Kushwaha](2024/day20.md) - [ ] ♾️ 21 > [Smarter, Better, Faster, Stronger - Testing at Scale](2024/day21.md) - Ada Lündhé - [ ] ♾️ 22 > [Test in Production with Kubernetes and Telepresence](2024/day22.md) - Mohammad-Ali A'râbi - [ ] ♾️ 23 > [SQL Server 2022 on Linux Containers and Kubernetes from Zero to a Hero!](2024/day23.md) - Yitzhak David From 213a21a72abcd20ef84216c103b2835af8e98522 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Wed, 1 Nov 2023 02:15:45 -0700 Subject: [PATCH 13/16] Added more speakers to the list for 2024 --- 2024.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/2024.md b/2024.md index eea2c7f..d21a2be 100644 --- a/2024.md +++ b/2024.md @@ -34,7 +34,7 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 8 > [Azure ARM now got Bicep](2024/day08.md) - Tushar Kumar - [ ] ♾️ 9 > [GitOps: The next Frontier in DevOps!](2024/day09.md) - Megha Kadur - [ ] ♾️ 10 > [Is Kubernetes Too Complicated? No, And Here's Why](2024/day10.md) - Julia Furst -- [ ] ♾️ 11 > [Day 11](2024/day11.md) +- [ ] ♾️ 11 > [Architecting for Versatility](2024/day11.md) - Tim Banks - [ ] ♾️ 12 > [Container Security for Enterprise Kubernetes environments](2024/day12.md) - Imran Roshan - [ ] ♾️ 13 > [Automate like a pro: Dealing with test automation hassles](2024/day13.md) - Mesut Durukal - [ ] ♾️ 14 > [Navigating Cloud-Native DevOps: Strategies for Seamless Deployment](2024/day14.md) - Yhorby Matias @@ -51,7 +51,7 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 25 > [Kube-Nation: Exploring the Land of Kubernetes](2024/day25.md) - Siddhant Khisty & Aakansha Priya - [ ] ♾️ 26 > [Platform Engineering Is Not About Tech](2024/day26.md) - Nicolò Cambiaso Erizzo & Francesca Carta - [ ] ♾️ 27 > [Automating cloud infrastructure with Ansible](2024/day27.md) - Soumyadip Chowdhury -- [ ] ♾️ 28 > [Day 28](2024/day28.md) +- [ ] ♾️ 28 > [Policy-as-Code Super-Powers! Rethinking Modern IaC With Service Mesh And CNI](2024/day28.md) - Kat Morgan & Marino Wijay - [ ] ♾️ 29 > [The Reverse Technology Thrust](2024/day29.md) - Rom Adams - [ ] ♾️ 30 > [How GitHub delivers GitHub using GitHub](2024/day30.md) - April Edwards - [ ] ♾️ 31 > [DevSecOps: Integrating Security into the DevOps Pipeline](2024/day31.md) - Reda Hajjami @@ -61,8 +61,8 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 35 > [Using code dependency analysis to decide what to test](2024/day35.md) - Patrick Kusebauch - [ ] ♾️ 36 > [Exploring Firecracker](2024/day36.md) - Irine Kokilashvili - [ ] ♾️ 37 > [Practical introduction to OpenTelemetry tracing](2024/day37.md) - Nicolas Fränkel -- [ ] ♾️ 38 > [Day 38](2024/day38.md) -- [ ] ♾️ 39 > [Day 39](2024/day39.md) +- [ ] ♾️ 38 > [Open Standards: Empowering Cloud-Native Innovation](2024/day38.md) - Kunal Verma +- [ ] ♾️ 39 > [DIs TLS in Kubernetes really that hard to understand?](2024/day39.md) - Shivang Shandilya - [ ] ♾️ 40 > [Infrastructure as Code - A look at Azure Bicep and Terraform](2024/day40.md) - Sarah Lean - [ ] ♾️ 41 > [Building Scalable Infrastructure For Advanced Air Mobility](2024/day41.md) - Dan Lambeth - [ ] ♾️ 42 > [The North Star: Risk-driven security](2024/day42.md) - Jonny Tyers @@ -73,12 +73,12 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 47 > [From Puddings to Platforms: Bringing Ideas to life with ChatGPT](2024/day47.md) - Anthony Spiteri - [ ] ♾️ 48 > [Azure logic app, low / no code](2024/day48.md) - Ian Engelbrecht - [ ] ♾️ 49 > [Enhancing DevOps with MLOps for GenAI and AI-Powered Solutions](2024/day49.md) - Azhar Amir -- [ ] ♾️ 50 > [Day 50](2024/day50.md) +- [ ] ♾️ 50 > [State of cloud native 2024](2024/day50.md) - Saiyam Pathak - [ ] ♾️ 51 > [PCI Compliance in the Cloud](2024/day51.md) - Barinua Kane - [ ] ♾️ 52 > [Multi-Model Databases and its place in DevOps](2024/day52.md) - Pratim Bhosale - [ ] ♾️ 53 > [Implementing SRE (Site Reliability Engineering)](2024/day53.md) - Andy Babiec - [ ] ♾️ 54 > [Let's go sidecarless in Ambient Mesh!](2024/day54.md) - Leon Nunes -- [ ] ♾️ 55 > [Day 55](2024/day55.md) +- [ ] ♾️ 55 > [Bringing Together IaC and CM with Terraform Provider for Ansible](2024/day55.md) - Razvan Ionescu - [ ] ♾️ 56 > [Automated database deployment within the DevOps process](2024/day56.md) - Marc Müller - [ ] ♾️ 57 > [Multi-Cloud Service Discovery and Load Balancing](2024/day57.md) - Vladislav Bilay - [ ] ♾️ 58 > [OSV Scanner: A Powerful Tool for Open Source Security](2024/day58.md) - Paras Mamgain @@ -100,17 +100,17 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 74 > [Workload Identity Federation with Azure DevOps and Terraform](2024/day74.md) - Arindam Mitra - [ ] ♾️ 75 > [Achieving Regulatory Compliance in Multi-Cloud Deployments with Terraform](2024/day75.md) - Eric Evans - [ ] ♾️ 76 > [All you need to know about AWS CDK.](2024/day76.md) - Amogha Kancharla -- [ ] ♾️ 77 > [Day 77](2024/day77.md) -- [ ] ♾️ 78 > [Day 78](2024/day78.md) -- [ ] ♾️ 79 > [Day 79](2024/day79.md) +- [ ] ♾️ 77 > [DConnect to Microsoft APIs in Azure DevOps Pipelines using Workload Identity Federation](2024/day77.md) - Jan Vidar Elven +- [ ] ♾️ 78 > [Scaling Terraform Deployments with GitHub Actions: Essential Configurations](2024/day78.md) - Thomas Thornton +- [ ] ♾️ 79 > [DevEdOps](2024/day79.md) - Adam Leskis - [ ] ♾️ 80 > [Unlocking K8s Troubleshooting Best Practices with Botkube](2024/day80.md) - Maria Ashby -- [ ] ♾️ 81 > [](2024/day81.md) -- [ ] ♾️ 82 > [](2024/day82.md) -- [ ] ♾️ 83 > [](2024/day83.md) -- [ ] ♾️ 84 > [](2024/day84.md) -- [ ] ♾️ 85 > [](2024/day85.md) -- [ ] ♾️ 86 > [](2024/day86.md) -- [ ] ♾️ 87 > [](2024/day87.md) -- [ ] ♾️ 88 > [](2024/day88.md) -- [ ] ♾️ 89 > [](2024/day89.md) +- [ ] ♾️ 81 > [Leveraging Kubernetes to build a better Cloud Native Development Experience](2024/day81.md) - Nitish Kumar +- [ ] ♾️ 82 > [Dev Containers in VS Code](2024/day82.md) - Chris Ayers +- [ ] ♾️ 83 > [IaC with Pulumi and GitHub Actions](2024/day83.md) - Till Spindler +- [ ] ♾️ 84 > [Hacking Kubernetes For Beginners](2024/day84.md) - Benoit Entzmann +- [ ] ♾️ 85 > [Reuse, Don't Repeat - Creating an Infrastructure as Code Module Library](2024/day85.md) - Sam Cogan +- [ ] ♾️ 86 > [Tools To Make Your Terminal DevOps and Kubernetes Friendly](2024/day86.md) - Maryam Tavakkoli +- [ ] ♾️ 87 > [Hands-on Performance Testing with k6](2024/day87.md) - Pepe Cano +- [ ] ♾️ 88 > [What Developers Want from Internal Developer Portals](2024/day88.md) - Ganesh Datta +- [ ] ♾️ 89 > [Seeding Infrastructures: Merging Terraform with Generative AI for Effortless DevOps Gardens](2024/day89.md) - Renaldi Gondosubroto - [ ] ♾️ 90 > [](2024/day90.md) From 423657f3e87d82a2c842d4462dcfdaf713af9e06 Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Tue, 14 Nov 2023 17:44:32 -0600 Subject: [PATCH 14/16] Added Session details --- 2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2024.md b/2024.md index d21a2be..067d103 100644 --- a/2024.md +++ b/2024.md @@ -43,7 +43,7 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 17 > [Know your data: The Stats behind the Alerts](2024/day17.md) - Dave McAllister - [ ] ♾️ 18 > [Continuous Delivery: From Distributed Monolith to Microservices as a unit of deployment](2024/day18.md) - Naresh Waswani - [ ] ♾️ 19 > [An introduction to API Security in Kubernetes](2024/day19.md) - Geoff Burke -- [ ] ♾️ 20 > [Kunal Kushwaha](2024/day20.md) +- [ ] ♾️ 20 > [Navigating the Vast DevOps Terrain: Strategies for Learning and Staying Current](2024/day20.md) - Kunal Kushwaha - [ ] ♾️ 21 > [Smarter, Better, Faster, Stronger - Testing at Scale](2024/day21.md) - Ada Lündhé - [ ] ♾️ 22 > [Test in Production with Kubernetes and Telepresence](2024/day22.md) - Mohammad-Ali A'râbi - [ ] ♾️ 23 > [SQL Server 2022 on Linux Containers and Kubernetes from Zero to a Hero!](2024/day23.md) - Yitzhak David From fb28c54c5d232a739128bd6b6dcd062848d5374f Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Tue, 14 Nov 2023 17:49:34 -0600 Subject: [PATCH 15/16] Replaced Session --- 2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2024.md b/2024.md index 067d103..5b9ad82 100644 --- a/2024.md +++ b/2024.md @@ -50,7 +50,7 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 24 > [From Chaos to Resilience: Decoding the Secrets of Production Readiness](2024/day24.md) - Alejandro Pedraza Borrero - [ ] ♾️ 25 > [Kube-Nation: Exploring the Land of Kubernetes](2024/day25.md) - Siddhant Khisty & Aakansha Priya - [ ] ♾️ 26 > [Platform Engineering Is Not About Tech](2024/day26.md) - Nicolò Cambiaso Erizzo & Francesca Carta -- [ ] ♾️ 27 > [Automating cloud infrastructure with Ansible](2024/day27.md) - Soumyadip Chowdhury +- [ ] ♾️ 27 > [From Automated to Automatic - Event-Driven Infrastructure Management with Ansible](2024/day27.md) - Daniel Bodky - [ ] ♾️ 28 > [Policy-as-Code Super-Powers! Rethinking Modern IaC With Service Mesh And CNI](2024/day28.md) - Kat Morgan & Marino Wijay - [ ] ♾️ 29 > [The Reverse Technology Thrust](2024/day29.md) - Rom Adams - [ ] ♾️ 30 > [How GitHub delivers GitHub using GitHub](2024/day30.md) - April Edwards From 6552c3aee534e49338b9c86aae9d51d3e801bd7a Mon Sep 17 00:00:00 2001 From: Michael Cade Date: Wed, 22 Nov 2023 16:00:56 +0000 Subject: [PATCH 16/16] =?UTF-8?q?Added=20Ana=C3=AFs=20Urlichs=20to=20Day?= =?UTF-8?q?=2090!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2024.md b/2024.md index 5b9ad82..d24ca62 100644 --- a/2024.md +++ b/2024.md @@ -113,4 +113,4 @@ Or contact us via Twitter, my handle is [@MichaelCade1](https://twitter.com/Mich - [ ] ♾️ 87 > [Hands-on Performance Testing with k6](2024/day87.md) - Pepe Cano - [ ] ♾️ 88 > [What Developers Want from Internal Developer Portals](2024/day88.md) - Ganesh Datta - [ ] ♾️ 89 > [Seeding Infrastructures: Merging Terraform with Generative AI for Effortless DevOps Gardens](2024/day89.md) - Renaldi Gondosubroto -- [ ] ♾️ 90 > [](2024/day90.md) +- [ ] ♾️ 90 > [Fighting fire with fire: Why we cannot always prevent technical issues with more tech](2024/day90.md) - Anaïs Urlichs