90DaysOfDevOps/2023/ko/days/day20.md
2023-10-17 23:01:30 +09:00

8.9 KiB

IAST와 DAST의 결합 - 실습 시간

IAST와 DAST가 무엇인지 배웠다면 이제 실제 애플리케이션에서 이 프로세스를 사용하여 취약점을 찾아보는 실습을 해보겠습니다.

**참고: 오픈 소스 IAST 구현이 없으므로 상용 솔루션을 사용해야 합니다. 무료 티어가 있으므로 비용을 지불하지 않고도 실습을 따라갈 수 있으니 걱정하지 마세요.

여기에는 테스트하고 활용할 취약한 Java 애플리케이션, 손쉬운 설정을 위한 Docker 및 Docker Compose, IAST 솔루션용 Contrast Community Edition이 포함되어 있습니다.

전제조건

참고 : 이 글과 90일간의 데브옵스 프로그램의 작성자는 Contrast Security와 어떤 식으로든 관련이 있거나 관련이 있습니다. 오픈 소스 솔루션이 없고, 이 솔루션에는 결제나 신용카드 제공이 필요 없는 무료 티어가 있기 때문에 이 상용 솔루션을 사용하고 있습니다.

  1. 오픈 소스 IAST 구현이 없기 때문에 일부 무료 라이선스가 있는 상용 소스를 사용합니다. 이를 위해 2 개의 구성 요소가 필요합니다: IAST 솔루션 - https://github.com/rstatsinger/contrast-java-webgoat-docker. Mac 또는 Linux 환경에 설치된 docker 및 docker-compose가 필요합니다(이 실습은 Mint에서 테스트되었습니다). README를 따라 Contrast에서 계정을 생성하세요.

Getting started

시작하려면 리포지토리를 복제합니다.

Contrast Security에서 자격 증명을 받습니다. 오른쪽 상단의 Organization Settings -> Agent에서 당신의 이름을 클릭합니다. 그리고 Agent Username, Agent Service Key and API Key를 가져옵니다. 새로 복제된 리포지토리의 .env.template 파일에서 이 값으로 바꿉니다.

참고: 이 값은 비밀입니다. Git에 커밋하지 마세요. 실수로 이 값을 커밋하지 않도록 .env.template.gitignore 아래에 두는 것이 가장 좋습니다.

취약한 애플리케이션 실행하기

취약한 애플리케이션을 실행합니다.

./run.sh

또는

docker compose up

준비가 완료되면 http://localhost:8080/WebGoat에서 애플리케이션 UI에 액세스할 수 있습니다.

피해 입히기

이제 취약한 애플리케이션이 생겼으니 이를 익스플로잇해 보겠습니다.

  1. 여기에서 ZAP 프록시를 설치합니다.

    가장 쉬운 방법은 DAST 스캐너를 이용하는 것입니다. 이러한 스캐너 중 하나는 ZAP Proxy입니다. 무료 오픈소스 웹 앱 스캐너입니다.

  2. 여기에서 zap-cli를 설치합니다.

    다음으로 zap-cli를 설치합니다. zap-cli는 ZAP Proxy를 위한 오픈소스 CLI입니다.

  3. ZAP 프록시 실행

    설치된 위치에서 ZAP 프록시를 실행합니다. Linux Mint에서는 기본적으로 /opt/zaproxy에 있습니다. MacOS에서는 Applications에 있습니다.

  4. ZAP_API_KEYZAP_PORT에 대한 환경 변수를 설정합니다.

    ZAP 프록시에서 이 값을 가져옵니다. Options... -> API로 이동하여 API 키를 가져옵니다.

    Options... -> Network -> Local Servers/Proxies로 이동하여 포트를 설정하고 가져옵니다.

  5. zap-cli로 몇 가지 명령을 실행합니다.

    예시:

    zap-cli quick-scan -s all --ajax-spider -r http://127.0.0.1:8080/WebGoat/login.mvc
    

    또는 리포지토리에 있는 지침에 따라 취약한 애플리케이션을 손상시킬 수 있습니다.

  6. Constrast에서 결과 관찰

    어느 쪽이든, Contrast에서 애플리케이션의 Vulnerabilities 탭으로 이동하면, Contrast가 취약점을 감지한 것을 확인할 수 있을 것입니다. 조치를 취하라는 경고가 표시됩니다.

보너스: 이미지 스캐닝

애플리케이션의 동작을 관찰하여 공격을 탐지하는 데 IAST 솔루션이 어떻게 도움이 되었는지 살펴보았습니다. 이러한 공격을 애초에 막을 수 있었는지 살펴봅시다.

이 데모에 사용한 취약한 애플리케이션은 컨테이너로 된 패키지였습니다. 14일차15일차에서 배운 grype 스캐너를 통해 이 컨테이너를 스캔하고 결과를 확인해 보겠습니다.

$ 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
<truncated>

보시다시피 이 이미지는 취약점으로 가득 차 있습니다.

각 취약점을 자세히 살펴보면 RCE(원격 코드 실행), SQL 인젝션, XML 외부 엔티티 취약점 등과 같은 취약점이 있음을 알 수 있습니다.

주간 요약

IAST와 DAST는 애플리케이션의 동작을 모니터링하여 애플리케이션의 취약점을 찾는 데 도움이 되는 중요한 방법입니다. 이 작업은 애플리케이션이 이미 배포된 후에 수행됩니다.

컨테이너 이미지 스캔은 컨테이너 내부에 있는 라이브러리를 기반으로 애플리케이션의 취약점을 찾는 데 도움이 될 수 있습니다.

이미지 스캔과 IAST/DAST는 상호 배타적이지 않습니다. 둘 다 보안 SDLC에서 각자의 역할을 하며 공격자보다 먼저 다양한 문제를 발견하는 데 도움이 될 수 있습니다.

21일차에 뵙겠습니다.