취약점 개념 설명
CSRF 취약점은 Cross-Site Request Forgery의 약어로 사이트 간 요청 위조라는 의미의 취약점으로 사용자의 의지와는 무관하게 공격자가 의도한 행위, 예를 들면 게시글 작성 또는 수정, 삭제 또는 패스워드 변경 등의 요청을 사용자의 권한으로 특정 웹 서버에 요청할 수 있는 취약점을 의미합니다.
CSRF 사례
실제 사례로 2008년 옥션의 관리자가 CSRF 공격에 당하여 관리자 계정이 탈취된 사례가 있는데 이로 인해 약 1,800만 명의 개인정보가 유출된 사례가 있다.
이러한 방식으로 공격에 당할 경우 상당히 파급력이 커질 수 있는 위험도가 높은 취약점이다.
DVWA (Medium) 환경 실습
CSRF 공격 실습을 위해 CSRF 탭에 들어온 모습이다.
해당 페이지에 있는 패스워드 변경 기능을 이용하여 피해자(본인)에게 패스워드 변경 요청이 담긴 URL을 전달하여 피행자 계정의 패스워드를 변경하는 공격을 수행하였다.
패스워드 변경 요청이 어떤 형식으로 서버에 전달되어 패스워드가 변경되는 것인지 확인하기 위해 일반적인 패스워드 변경 요청을 서버에 전송하여 패스워드를 변경한 모습이다.
위 그림의 URL에 보이는 것과 같이 URL에 지정된 파라미터에 변경할 패스워드 값이 저장되고 이를 서버에 전송하여 패스워드를 변경한다는 것을 확인할 수 있다.
위 사진은 Low 레벨에서 먼저 CSRF 공격을 수행한 모습이다.
이전에 확인한 패스워드 변경 요청 URL에 지정된 패스워드 변경 파라미터에 값을 원하는 값으로 변경한 후 URL에 입력하여 서버에 전송한 결과 모습이다.
사진에서 보이는 것과 같이 Password Changed. 라는 메시지가 출력되며 패스워드가 변경된 것을 확인할 수 있었다.
Low 레벨과 같은 방법으로 Medium 레벨에서 CSRF 공격을 수행한 모습이다.
이전 Low 레벨에서 성공했던 것과는 다르게 That request didn't look correct. 라는 문구가 출력되며 패스워드 변경에 실패하는 것을 확인할 수 있다.
Medium 레벨에서는 Low 레벨과 다르게 패스워드 변경 요청 위조에 실패한 것을 확인할 수 있었다. 그 원인을 살펴보기 위해 Low 레벨과 Medium 레벨이 구현된 소스코드를 비교한 모습이다.
비교한 결과 Medium 레벨의 소스코드에만 표시된 곳에 보이는 것처럼 Referer 값을 검증하는 코드가 추가된 것을 확인할 수 있다.
즉, 같은 도메인을 가진 페이지에서 요청이 전송되어야 오류가 발생하지 않고, 패스워드가 변경된다는 것을 확인할 수 있었다.
위 사진은 살펴보면 첫 번째 사진의 경우 정상적인 패스워드 변경 요청 패킷을 BurpSuite를 사용하여 가로챈 모습이고, 두 번째 사진의 경우 비정상적인 패스워드 변경 요청 패킷을 가로챈 모습이다.
이를 비교해보면 정상적인 패스워드 변경 요청의 경우에만 Referer 필드의 값이 DVWA 웹 페이지로 설정되어 서버로 전송된 것을 확인할 수 있었다.
즉, Referer 필드의 값만 DVWA 웹 페이지로 설정되어 있다면 CSRF 공격에 성공할 수 있을 것으로 보여졌다.
패스워드 변경 요청이 DVWA 웹 페이지에서 전달되는 것과 같은 효과(Referer 필드값이 DVWA 웹 페이지로 설정)를 위해 Reflected XSS 취약점을 이용하여 패스워드 변경 요청이 서버로 전송되도록 스크립트를 작성하고 악성 URL을 생성하였다.
삽입된 스크립트는 <img src="패스워드 변경 요청 URL" onerror=alert("CSRF Attack")>와 같은 스크립트를 사용하였다.
실제 공격 시나리오와 비슷한 환경으로 공격을 시도하기 위해 피해자(본인)에게 이전에 생성한 악성 URL을 메일로 전송하였다.
위 사진과 같이 피해자는 악성 URL이 포함된 메일을 수신하고 해당 메일을 긴급한 메일로 생각하여 악성 URL로 연결되는 하이퍼링크를 클릭하여 악성 스크립트를 실행하게 된다.
악성 스크립트가 실행되면 위 사진과 같은 패킷이 서버로 전송되는 것을 확인할 수 있다.
패킷을 살펴보면 패스워드 변경 요청이 서버로 전송되는 것을 확인할 수 있고, 이때 Referer 필드에 설정된 값도 DVWA 의 URL로 설정된 것을 확인할 수 있다.
CSRF 공격을 통해 변경한 패스워드를 이용하여 admin 계정으로 로그인을 시도한 결과 패스워드가 변경되어 로그인에 성공한 모습을 위 사진과 같이 확인할 수 있었다.
CSRF 대응방안
CSRF 취약점을 이용하여 패스워드 변경 요청을 위조하는 것을 방지하기 위해서는 위 사진과 같이 기존에 사용하던 패스워드를 추가로 입력하도록 로직을 구현하는 것이 필요하다.
또한, 위 사진과 같이 HTTP 헤더의 Referer 값을 검증할 수 있는 로직을 구현한다.
위 사진과 같이 Security Token(CSRF Token)을 사용하여 세션에 저장된 토큰값과 요청 파라미터에 전달되는 토큰값이 일치하는지 검증할 수 있는 로직을 구현한다.
'CERT > 웹 모의해킹 실습' 카테고리의 다른 글
[웹 해킹] Command Injection 공격 실습 / DVWA(Medium) 환경 실습 / 대응방안 (0) | 2023.08.03 |
---|---|
[웹해킹] Brute Force 공격 실습 / DVWA(Medium) 환경 실습 / 대응 방안 (0) | 2023.07.20 |
[웹 해킹] Stored XSS / DVWA 환경 실습 / 대응 방안 (0) | 2023.07.01 |
[웹 해킹] Reflected XSS / DVWA 환경 실습 / 대응 방안 (0) | 2023.07.01 |
[웹 해킹] DOM Based XSS / DVWA 환경 실습 / 대응 방안 (0) | 2023.06.21 |