소개
이 랩에서는 Gobuster 가 TLS 인증서 오류, 특히 자체 서명 또는 유효하지 않은 인증서를 처리하는 상황을 학습합니다. 기본적으로 Gobuster 는 다른 많은 도구와 마찬가지로 안전한 통신을 보장하기 위해 엄격한 TLS 인증서 검증을 수행합니다. 그러나 특정 테스트 시나리오에서는 이 검증을 우회해야 할 수도 있습니다. 이 랩에서는 이러한 대상 (target) 을 식별하고, 기본 오류를 관찰한 다음, -k 플래그를 사용하여 인증서 검증을 비활성화하여 스캔을 진행하는 방법을 안내합니다. 마지막으로 TLS 검증 비활성화의 보안 영향을 논의합니다.
자체 서명 또는 유효하지 않은 TLS 인증서를 사용하여 대상 식별하기
이 단계에서는 자체 서명되었거나 기타 유효하지 않은 TLS 인증서를 사용하는 대상 URL 을 식별합니다. 이 랩의 목적을 위해 Gobuster 가 플래그를 지정할 인증서 문제가 있는 것으로 알려진 공개적으로 사용 가능한 테스트 사이트를 사용할 것입니다. 이를 통해 문제를 안정적으로 시연하고 해결 방법을 보여줄 수 있습니다.
터미널을 열고 curl을 사용하여 대상 URL 에 액세스해 보세요. 인증서 오류가 표시되어야 하며, 이는 인증서가 시스템에서 신뢰되지 않음을 나타냅니다. 이것이 Gobuster 도 문제를 겪을 시나리오입니다.
다음 명령을 실행합니다.
curl https://self-signed.badssl.com/
인증서 문제를 나타내는 다음과 유사한 출력이 표시되어야 합니다.
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about such a situation and
how to fix it, please consult the relevant articles in the links above.
이 출력은 대상 https://self-signed.badssl.com/이 기본적으로 신뢰되지 않는 인증서를 제시함을 확인하며, 이는 이 랩에 필요한 정확한 것입니다.
스캔 시도 및 인증서 오류 관찰
이 단계에서는 TLS 인증서 검증을 비활성화하지 않고 식별된 대상에 대해 Gobuster 를 실행해 봅니다. 예상대로 Gobuster 는 자체 서명된 인증서를 만나 curl이 표시한 것과 유사한 오류와 함께 종료됩니다. 이는 엄격한 인증서 유효성 검사를 강제하는 Gobuster 의 기본 동작을 보여줍니다.
다음 Gobuster 명령을 실행합니다.
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -q
dir: 디렉토리/파일 무차별 대입 (brute-forcing) 스캔을 수행하고 있음을 지정합니다.-u https://self-signed.badssl.com/: 대상 URL 을 설정합니다.-w /usr/share/wordlists/dirb/common.txt: 무차별 대입에 사용할 단어 목록 (wordlist) 을 지정합니다.-q: 배너 및 기타 불필요한 출력을 억제하여 오류를 더 명확하게 표시합니다.
TLS 핸드셰이크 오류를 나타내는 다음과 유사한 출력이 표시되어야 합니다.
[!] GoBuster is unable to connect to the target: Get "https://self-signed.badssl.com/": x509: certificate signed by unknown authority
이 오류 메시지는 신뢰할 수 없는 인증서로 인해 Gobuster 가 연결을 설정하지 못했으며 스캔이 진행되지 못했음을 확인합니다.
-k 플래그로 스캔 다시 실행하기
이 단계에서는 Gobuster 스캔을 다시 실행하지만, 이번에는 -k 플래그를 포함합니다. -k 플래그 (--no-tls-validation의 약어) 는 Gobuster 에 TLS 인증서 검증을 건너뛰도록 지시합니다. 이는 제어된 환경이나 인증서 경고에도 불구하고 대상을 명시적으로 신뢰하는 자체 서명 인증서에 대한 테스트에 유용합니다.
-k 플래그를 추가하여 다음 Gobuster 명령을 실행합니다.
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -k -q
-k: TLS 인증서 검증을 비활성화하는 중요한 플래그입니다.
이번에는 Gobuster 가 즉시 인증서 오류로 종료되지 않아야 합니다. 대신 디렉토리 무차별 대입 (brute-forcing) 프로세스를 시작합니다. 단어 목록 (wordlist) 이 크고 디렉토리를 빠르게 찾지 못하면 즉시 출력이 보이지 않을 수 있지만, 이전 오류가 없다는 것은 성공을 나타냅니다.
스캔이 이제 진행됨을 확인하기
이 단계에서는 -k 플래그 덕분에 Gobuster 스캔이 이제 활발하게 실행되고 단어 목록 (wordlist) 을 처리하고 있음을 확인할 것입니다. -q 플래그를 사용하여 대부분의 출력을 억제했기 때문에 디렉토리가 발견되지 않는 한 많은 활동을 보지 못할 수 있습니다. 진행 상황을 더 잘 볼 수 있도록 -q 플래그를 제거하고 Gobuster 가 짧은 시간 동안 실행되도록 하겠습니다.
진행 상황을 볼 수 있도록 이번에는 -q 플래그 없이 다음 명령을 다시 실행합니다.
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -k
이제 Gobuster 의 정상적인 출력이 표시되어 대상에 대해 활발하게 스캔하고 있음을 나타냅니다. 출력에는 진행 상황과 발견된 디렉토리 또는 파일이 표시됩니다. 예를 들면 다음과 같습니다.
===============================================================
Gobuster vX.X.X -- by OJ <@_odejim> & @Neohapsis
===============================================================
[+] Url: https://self-signed.badssl.com/
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
[+] Allow redirects: false
[+] Follow new location: false
[+] No TLS validation: true
===============================================================
2023/10/27 10:30:00 Starting gobuster in directory enumeration mode
/admin (Status: 301)
/login (Status: 301)
...
스캔이 실행 중임을 확인하면 Ctrl+C를 눌러 중지할 수 있습니다. 핵심은 이전 인증서 오류 없이 스캔이 성공적으로 시작되었다는 것입니다.
검증 비활성화의 보안 영향 이해하기
이 마지막 단계에서는 TLS 인증서 검증 비활성화의 보안 영향에 대해 논의합니다. -k 플래그는 특정 테스트 시나리오에 유용하지만, 주의해서 그리고 필요할 때만 사용해야 하는 이유를 이해하는 것이 중요합니다.
TLS 인증서 검증을 비활성화하면 본질적으로 Gobuster(또는 다른 도구) 에게 서버가 제시하는 인증서가 유효한지, 만료되었는지, 자체 서명되었는지, 또는 신뢰할 수 없는 기관에서 발급되었는지 여부에 관계없이 신뢰하라고 지시하는 것입니다. 이는 여러 보안 위험에 노출될 수 있습니다.
- 중간자 공격 (Man-in-the-Middle, MitM): 공격자는 합법적인 서버로의 연결을 가로채고 자신의 위조된 인증서를 제시할 수 있습니다. 검증이 비활성화된 경우, 도구는 자신도 모르게 공격자의 서버에 연결하게 되어 공격자가 트래픽을 도청하거나 조작할 수 있게 됩니다.
- 사칭: 의도한 대상인 것처럼 위장한 악성 서버에 실수로 연결할 수 있습니다. 인증서 검증 없이는 실제 서버와 통신하고 있다는 암호화된 보장이 없습니다.
- 데이터 무결성 및 기밀성 손상: 공격자가 성공적으로 MitM 공격을 수행할 수 있다면, 통신 중인 데이터를 읽거나 수정하거나 삽입할 수 있어 기밀성과 무결성 모두를 손상시킬 수 있습니다.
-k를 사용하는 것이 허용되는 경우는 언제인가요?
- 제어된 테스트 환경: 서버를 명시적으로 제어하고 자체 서명 또는 유효하지 않은 인증서를 인지하고 있는 실험실 환경에서 애플리케이션 또는 서버를 테스트할 때.
- 내부 네트워크: 모든 엔드포인트를 완전히 제어하고 위험을 이해하는 신뢰할 수 있는 네트워크 내에서 통신하는 내부 도구의 경우.
- 디버깅: 디버깅 목적으로 일시적으로 사용하지만, 프로덕션 또는 민감한 작업에는 항상 검증을 다시 활성화해야 합니다.
모범 사례: 항상 강력한 TLS 인증서 검증을 우선시하십시오. 절대적으로 필요한 경우에만 비활성화하고 관련 위험을 완전히 이해해야 합니다. 프로덕션 시스템의 경우 항상 유효하고 신뢰할 수 있는 인증서가 사용되도록 하십시오.
이로써 Gobuster 에서 TLS 인증서 검증을 비활성화하는 실험실을 마칩니다. 인증서 문제가 있는 대상을 식별하는 방법, Gobuster 의 기본 동작을 관찰하는 방법, 그리고 -k 플래그를 사용하여 검증을 우회하는 방법을 배웠으며, 동시에 중요한 보안 영향도 이해했습니다.
요약
이 실험실에서는 Gobuster 에서 TLS 인증서 검증을 관리하는 방법을 성공적으로 배웠습니다. curl을 사용하여 자체 서명된 인증서를 가진 대상을 식별하는 것으로 시작했으며, 이는 일반적인 인증서 오류를 보여주었습니다. 그런 다음 Gobuster 가 엄격한 TLS 검증으로 인해 기본적으로 그러한 대상에 대한 스캔에 실패하는 방식을 관찰했습니다. 실험실의 핵심은 Gobuster 에 -k 플래그를 사용하여 인증서 검증을 우회하여 스캔을 진행시키는 것이었습니다. 마지막으로 TLS 검증 비활성화의 중요한 보안 영향을 이해하게 되었으며, 제어된 또는 특정 테스트 시나리오에서만 신중하게 사용해야 함을 강조했습니다. 이 지식은 웹 스캔 도구를 효과적이고 안전하게 사용하는 데 매우 중요합니다.
