티스토리 뷰
WebGoat에 로그인하면 소개, 기본내용, 그리고 OWASP Web Top10과 관련된 실습내용을 확인할 수 있다.
이제 차례대로 하나씩 진행해보면서 WebGoat를 분석해 보고자 한다.
가장 먼저 General > HTTP Basics 을 확인해보면 Proxy를 이용하여 요청 및 응답을 확인이 필요하다고 하며, 응답값에 사용되는 HTTP Request 파라미터, 쿠키 등을 확인해보라고 이야기 하고 있다.
해당 내용을 확인하고 나면 간단한 퀴즈를 보여준다.
퀴즈는 현재 페이지에서 제공하는 요청기능에 대해서 어떤 HTTP Method를 사용하고 있고, 이때 Magic Number가 무엇인지 물어보고 있다.
해당 요청을 처리하는 Controller의 함수를 확인해보면, answer, magic_answer, magic_num의 파라미터를 전달받고 있고, 해당 요청은 POST를 사용하고 있는 것을 알 수 있다. 또한 파라미터로 전달받은 magic_answer와 magic_num 2개 값을 비교하고 있으므로, 본 퀴즈에서 물어보는 magic_number는 클라이언트 코드에 존재하는 것을 알 수 있다.
클라이언트 코드를 확인해보니, magic_num은 Math.random()을 이용하여 랜덤한 정수값을 생성하여 전달하고 있는 것을 알 수 있다. 해당 문제를 맞추기 위해서는 Proxy를 사용하여 생성된 magic_num을 확인하고 파라미터 변조 후 데이터를 요청해야 하는 것을 알 수 있다.
요청을 전달하고 Proxy를 이용해서 이번에 생성된 magic_num을 확인하고, answer에는 POST, magic_answer에는 87을 입력하여 요청을 전달하면, 해당 퀴즈를 통과하는 것을 확인할 수 있다.
이 퀴즈는 Proxy를 사용하여 요청값을 확인하고 파라미터를 변조해보는 기본적인 WebGoat의 사용방법을 위한 퀴즈이다.
하지만 일반적인 상황에서 해당 기능은 여러가지 보안 취약점이 존재할 수 있다.
서버의 가용성을 위해 로봇에 의한 대량의 요청 등을 방지하기 위해 해당 기능을 도입한다고 가정해보자.
magic_number가 인증번호나 로봇에 의해 대량의 요청을 방지하기 위해 사용하는 것이라면, 매번 seed 처리가 되는 안전한 랜덤함수를 사용해야 한다. 하지만 현재 코드에서 사용하고 있는 랜덤함수는 일정시간 동안 동알한 랜덤값을 생성하는 안전하지 않은 랜덤함수(Math.random)을 사용하고 있다. 이러한 안전한 랜덤함수를 사용하게 되면, 생성될 랜덤값을 유추 또는 재사용할 수 있다. 이러한 취약점을 방지하기 SecureRandom과 같은 안전한 랜덤 생성기를 사용해야 한다. 추가적으로 랜덤값이 클라이언트에서 생성하고 있기 때문에, 생성되는 랜덤값 자체를 내가 원하는 값으로 수정할 수 있기 때문에 실질적으로 대량의 요청방지 등에 사용하기 어렵다. 랜덤값은 서버 측 코드에서 생성하고, 세션에 저장한 뒤, magic_number에 대한 답변을 서버 측 코드에서 검증해야 대량의 요청을 정상적으로 방지할 수 있을 것이다.
이번에는 Profile과 같은 중요기능을 제공하기 전 사용자 재인증 프로세스에 사용되는 페이지라고 가정해보자.
현재 소스코드에서는 인증결과가 클라이언트에 전달되고 있으며, 인증결과가 세션 등에 저장되지 않고 있기 때문에, 해당 인증 이후에 제공되어야 하는 서비스가 있다면, 응답값을 변조하여, 인증과정을 우회할 수 있게 된다. 이는 결국 재인증 결과와 상관없이 Profile 페이지에 접근하여 세션 소유자의 개인정보를 탈취할 수 있게 된다. 때문에 인증과정에서는 인증결과가 클라이언트에서 처리되지 않고, 서버 측 코드에서 검증 후 결과를 세션과 같이 변조가 불가능한 값에 저장하고, 인증이 필요한 기능을 제공하기 전 정상적인 인증절차를 거친 유저인지 확인해야 한다.
'Web Analytics > WebGoat' 카테고리의 다른 글
(WebGoat) General - Developer Tools #1 (0) | 2024.03.05 |
---|---|
(WebGoat) General - HTTP Proxies (0) | 2024.03.02 |
WebGoat 실습환경 구축 (loopback 이슈 해결) (0) | 2024.02.26 |
WebGoat 분석 - Authorization (0) | 2024.02.14 |
WebGoat 분석 - Authentication (0) | 2024.02.14 |
- Total
- Today
- Yesterday