Completely Automated Public Turing test to cell Computer and Humans Apart 의 약어
보통 로그인 등의 과정에 추가적인 인증 요소로 포함되어 위 사진과 같이 접근하고자 하는 대상이 실제 사용자인지 컴퓨터인지 구별하기 위해 사용되는 프로그램을 의미한다.
Insecure CAPTCHA는 직역하면 안전하지 않은 캡챠라는 의미로 캡챠를 우회할 수 있는 취약점을 의미한다.
DVWA 환경에서 Insecure CAPTCHA 실습
모의해킹 실습 환경
우선 본 실습에 앞서 실습 환경의 경우 리눅스 환경에서 DVWA 환경을 구축한 후 가장 취약한 환경인 Low 레벨 환경에서 실습을 진행하였습니다.
Insecure CAPTCHA 탭으로 이동한 모습
Insecure CAPTCHA 실습을 위해 해당 탭으로 이동한 모습
패스워드를 변경할 수 있는 기능과 함께 CAPTCHA가 포함되어져 있는 모습을 확인할 수 있다.
해당 기능 동작을 확인하기 위해 일반적인 패스워드 변경을 시도
해당 페이지의 패스워드 변경 기능은 어떻게 동작하는지 확인하기 위해 일반적인 패스워드 변경을 시도하는 상황
변경할 패스워드를 입력하고 캡챠 인증을 수행한 후 Change 버튼을 클릭하여 진행
Change 버튼을 클릭하였을 때 서버로 전송된 패킷
이전 사진에서 Change 버튼을 클릭하여 진행하였을 때 전송된 패킷을 Burp Suite를 이용하여 스니핑한 모습
해당 패킷을 살펴본 결과 Step 이라는 파라미터에 1이라는 값을 저장한 후 변경할 패스워드 및 캡챠 인증 정보와 함께 서버로 전송하는 것을 확인할 수 있다.
Step 파라미터에 1을 포함한 패킷이 전송된 모습
Step 파라미터에 1이라는 값을 포함한 패킷이 전송된 후 캡챠 인증이 완료 되었다는 메시지가 출력되는 것을 확인할 수 있다.
Change 버튼을 클릭하여 계속 진행
Change 버튼을 클릭하여 패스워드 변경을 계속 진행한 결과
Change 버튼을 클릭하여 패스워드 변경을 계속 진행한 결과 위 사진과 같은 패킷이 서버로 전송되는 것을 확인할 수 있었다.
해당 패킷을 살펴보면 이전 패킷과 다르게 Step 이라는 파라미터에 2라는 값과 변경할 패스워드가 포함된 패킷이 서버로 전송되는 모습을 확인할 수 있었다.
일반적인 패스워드 변경이 마무리 된 상황
Step 파라미터에 2라는 값과 변경할 패스워드가 포함된 패킷이 서버로 전송된 후 DVWA 페이지에 패스워드가 변경 되었다는 메시지가 출력되며 패스워드가 변경된 것을 확인할 수 있었다.
해당 과정을 보았을 때 Step 이라는 파라미터에 2라는 값은 캡챠가 인증 되었다라는 것을 증명할 수 있는 파라미터로 보여졌고, Step 이라는 파라미터에 2를 저장하고 변경할 패스워드와 함께 서버로 전송한다면 캡챠 기능을 우회하여 패스워드를 변경할 수 있을 것으로 보여졌다.
Step 파라미터에 2가 저장되어 전송된 패킷을 Repeater 탭으로 전송
예상된 결과를 직접 실습해보기 위해 2번째로 전송된 패킷 즉, Step 파라미터에 2가 저장되어 서버로 전송된 패킷을 Burp Suite에 Repeater 탭으로 전송
Step 파라미터는 2를 저장, 패스워드 파라미터만 원하는 값으로 수정 후 전송
Step 파라미터에는 2를 저장하고, 패스워드 파라미터만 원하는 값으로 수정( 예시로는 hacker 로 수정 ) 후 서버로 전송하였음
Step에는2, 패스워드 파라미터에는 hacker 를 입력 후 패킷을 서버로 전송한 결과
이전에 정상적인 과정으로 패스워드를 변경하였을 때와 같이 패스워드가 변경되었다는 문구가 캡챠 기능을 거치지 않고 출력되는 것을 확인할 수 있었다.
패스워드가 hacker 로 변경되었는지 확인
실제 패스워드가 hacker 로 변경되었는지 확인하기 위해 패스워드에 hacker 를 입력하여 로그인을 시도하는 모습
최종적으로 캡챠를 우회한 패스워드 변경에 성공한 모습
최종적으로 캡챠를 우회한 패스워드 변경에 성공하여 패스워드가 hacker 로 변경되어 로그인에 성공한 것을 확인할 수 있다.
Insecure CAPTCHA 대응 방안
CAPTCHA 인증과 관련된 요청은 실습과 같이 여러 단계로 나누는 것보다 요청 한번으로 해당 기능이 처리되도록 구현하는 것이 좀 더 안전하다.
하지만 대부분의 CAPTCHA 인증의 경우 쉽게 우회가 가능하기 때문에 중요한 기능을 포함한 요청의 경우에는 다른 추가적인 인증 요소(OTP, 기존 패스워드 인증 등)를 추가하여 구현하는 것이 좀 더 안전하다.