상세 컨텐츠

본문 제목

Step9. 민감한 데이터 노출

화이트 해커를 위한 웹 해킹의 기술

by 메리_99 2021. 3. 7. 16:05

본문

반응형

Step9. 민감한 데이터 노출

민감한 데이터

  • 각종 개인 정보

  • 패스워드 세션 ID, 세션 토큰 등과 같은 로그인에 사용되는 정보

  • 업무상 기밀 등 비공개로 관리되는 정보

민감한 데이터 노출 리스크

  • HTTP 프로토콜을 사용하여 민감한 데이터가 전송되는 경우

  • 민감한 데이터가 평문으로 저장되는 경우

  • 안전하지 않은 암호화 방식을 사용하는 경우

HTTP 프로토콜에 의한 노출

  • HTTP는 웹의 근간이 되는 기술이지만, 애석하게도 현재에 와서는 기본적인 HTTP 프로토콜로 전달되는 요청과 응답 메시지들은 네트워크 스니핑이라고 하는 기법에 의해 도청될 위험이 있다.

    • 네트워크 스니핑 : 네트워크에 전송되는 데이터를 모니터링 하는 기술

      • ex) tcpdump(CLI기반), Wireshark(GUI 기반)

tcpdump를 사용

옵션

  • -n : IP 주소나 포트 숫자를 호스트 네임이나 서비스 이름을 변경하지 않고 숫자 그대로 표시한다.

  • -i :인터페이스를 지정하는 옵션이다. -i eth1을 하면 eth1 인터페이스를 통해 전달되는 트래픽을 스니핑 한다.

  • -A : 사람이 알아볼 수 있는 아스키 형태의 문자열로 출력하는 옵션이다.

  • -s 숫자 : 표시할 내용의 길이를 지정한다. -s 0을 사용하면 길이 제한 없이 출력하도록 설정한다.

  • tcp : TCP 프로토콜만 출력하도록 필터링한다.

  • port 8080 : 8080번 포트에 대해서만 출력하도록 필터링한다.

  • -v : eth1에 대한 모든 프로토콜을 볼 수 있게끔 한다.

  • 웹 사이트에서 로그인을 시도한다.

bWAPP에서 로그인을 시도

  • 이후 tcpdump를 통해 HTTP 요청을 스니핑 한다.

tcpdump로 스니핑한 HTTP 요청

  • 그러면 위와 같이 POST 메소드의 HTTP 요청이 전달되고 있는 것을 확인함과 동시에 바디 부분을 보면 로그인 정보가 노출됨을 확인할 수 있다.

웹 스토리지를 통한 노출 실습

  • 웹 스토리지에 저장된 데이터는 자바스크립트를 사용하여 읽을 수 있다.

  • 따라서 웹 사이트에 XSS 취약점이 존재하면 공격자가 마음대로 자바스크립트를 실행할 수 있기 때문에, 공격자가 스토리지에 저장된 데이터를 읽을 수 있게 된다.

  • 쿠키에 저장된 데이터도 자바스크립트로 읽을 수 있지만 쿠키의 HttpOnly 속성을 이용하여 읽지 못하도록 할 수 있다.

  • 웹 스토리지는 세션 스토리지와 로컬 스토리지로 분류된다.

  • 세션 스토리지 : 세션이 종료되면 데이터도 함께 삭제.

  • 로컬 스토리지 : 세션이 종료되도라도 따로 삭제 요청을 하기 전까지는 데이터가 계속해서 남아있음.

로컬 스토리지에 저장된 데이터

  • 위와 같이 개발자 도구를 이용해 로컬 스토리지 데이터를 확인할 수 있다.

  • XSS 취약점이 있다면 또한, 웹 스토리지에 저장된 정보를 알아낼 수 있다.

XSS를 이용한 웹 스토리지 공격

  • 코드는 <script>alert('secret: ' + localStorage.getitem('secret'))</script> 인데, 여기서 localStorage.getitem() 자바스크립트 함수를 이용하면 로컬 스토리지에 저장되어 있는 내용을 읽을 수 있다.

alert함수를 이용하여 로컬 스토리지 정보가 노출

평문으로 된 패스워드 노출 실습

bWAPP 회원가입 웹페이지

  • 위와 같이 간단한 회원가입을 진행한다.

가입 성공시 출력되는 웹 페이지

  • 그리고 Download를 눌러 계정 정보가 있는 파일을 다운로드할 수 있다고 가정하면,

계정정보가 출력

  • 그대로 패스워드가 평문으로 노출됨이 보인다.

Base64 인코딩

  • 패스워드와 같은 민감한 데이터를 단지 평문에서 알아보기 힘든 문자열로만 변경하는 것은 보안에 전혀 도움되지 않는다.

  • Base64 encoding : 이진 데이터를 아스키 텍스트 문자열로 변환하는 방법

  • 대표적으로 전자우편이나 HTTP 메시지를 전송할 때 사용하는데, 파일 전송과 같이 텍스트로 표현할 수 없는 바이너리 데이터를 전송할 때 Base64로 인코딩하여 전송한다.

  • 리눅스 터미널에서는 base64 명령어를 이용하여 base64 인코딩과 디코딩을 할 수 있다.

base64 디코딩

 

실습

  • 먼저 실습 웹 페이지에 접속한다

실습 웹 페이지

 

  • 버프 스위트의 HTTP History를 통해 secret헤더를 보고, 해당 secret을 Send to Decoder 한다.

버프스위트의 Send to Decoder
버프스위트 디코딩
디코딩 완료

  • 이와 같이 Base64 인코딩 방식은 언제든지 쉽게 다시 디코딩될 수 있는 방식이며, 암호화와 구분되어야 한다.

민감한 데이터 노출 대응 방안

HTTPS 프로토콜

  • HTTP 프로토콜로 전달되는 데이터는 공격자에게 쉽게 노출될 수 있기 때문에, 로그인과 같은 중요한 기능은 HTTPS 프로토콜을 이용하여 데이터가 암호화되어 전송되도록 구현해야 한다.

웹 스토리지 보호 대책

  • 되도록 민감한 데이터를 로컬 스토리지에 저장하는 것은 지양한다.

  • 어쩔 수 없이 민감한 데이터를 클라이언트로부터 전달받아야 하는 경우에는, 민감한 데이터를 쿠키를 통해 전달하도록 하고 해당 쿠키에 HttpOnly플래그를 추가해야 한다.

    • HttpOnly 플래그 : 쿠키값이 자바스크립트의 접근을 방지하는 역할을 한다.

검증된 암호화 사용

  • 민감한 데이터를 저장할 때에는 데이터들을 암호화하여 저장해야 한다.


위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 작성한 글입니다.

728x90

관련글 더보기

댓글 영역