Web Hacking/기타

민감한 데이터 노출 사례 실습

seungwon9201 2024. 7. 1. 15:27

민감한 데이터 종류

  • 개인정보(주민등록번호, 카드정보, 사생활 정보 등)
  • 패스워드, 세션 ID와 같은 로그인에 사용되는 정보
  • 업무상 기밀

많은 공격자들이 이러한 데이터를 탈취하려는 목적을 가지고 있는데, 이번 실습에서는 데이터가 적절하게 암호화되지 않았거나 평문으로 저장되어서 노출되는 경우에 대해서 알아볼 것이다.

 


HTTP 프로토콜에 의한 노출 실습

HTTP 프로토콜로 전송되는 요청과 응답 메시지들은 Network Sniffing이라는 기법에 의해서 도청당할 수 있다.

Network Sniffing은 네트워크에 전송되는 데이터들을 모니터링하는 기법이다.

Network Sniffing program은 tcpdump와 wireshark가 있다. 이번 실습에서는 tcpdump를 활용할 것이다.

-실습 목표-
tcpdump 프로그램을 사용하여 HTTP 프로토콜로 전송되는 사용자 계정 정보를 확인하자.

 

칼리리눅스에서 아래와 같이 명령어를 입력해보자.

tcpdump -ni eth1 -A -s 0 tcp port 80

-n : ip주소나 포트 숫자를 이름으로 변경하지 않고 숫자 그대로 표현

-i : 인터페이스를 지정하는 옵션(여기선 eth1을 지정)
-A : ASCII형태의 문자열로 출력

-s <숫자> : 표시할 내용의 길이 지정(여기선 제한 없음)

tcp : TCP 프로토콜만 출력

 

이러한 명령어를 입력한 뒤에 실습 페이지로 가보자.

 

 

이 실습페이지에서 사용자 정보를 입력하면 입력한 값이 HTTP 프로토콜을 통해서 전달이 된다.

아이디와 비밀번호를 입력해 보자.

이렇게 tcpdump를 이용하여 POST 메소드의 HTTP 요청이 전달되고 있는 것을 확인할 수 있다. 

이와 같이 HTTP 프로토콜로 전송하는 데이터는 Network Sniffing에 의해 노출될 수 있다.


 

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

웹 스토리지란 웹 애플리케이션이 사용자의 웹 브라우저에 데이터를 저장할 수 있는 기능이다.

 

그럼 쿠키와 다른 점이 뭘까?

 

쿠키는 요청 메시지가 전달될 때 자동으로 전송되기 때문에 요청이 일어날때마다 데이터가 전송되어 성능 저하가 발생할 수 있고 최대 길이가 제한되어 있었지만,

웹 스토리지 기능 덕분에 쿠키보다 큰 데이터를 저장할 수 있고 매번 서버로 데이터를 전달하지 않아도 된다.

 

그러나 웹 스토리지에 저장된 데이터는 자바스크립트를 사용하여 읽을 수 있기 때문에 보안에 주의해야 한다. 

즉, XSS 취약점이 있다면 스토리지에 저장된 데이터를 읽을 수 있게 된다. 

 

웹 스토리지는 세션 스토리지와 로컬 스토리지 두 개로 나눠지는데, 세션 스토리지는 세션이 종료되면 데이터도 사라지지만 로컬 스토리지는 종료되더라도 데이터가 남아있다.

 

그렇기 때문에 로컬스토리지의 경우 더 주의해야 한다.

 

이번에는 로컬 스토리지에 저장된 데이터를 읽어오는 실습을 해보자.

 

실습 페이지에 들어오니 이러한 메시지가 뜬다.

로그인 이름과 시크릿이 HTML5 웹 스토리지에 저장되어 있다.
힌트 : XSS를 사용해서 알아내자.

웹 스토리지에 저장된 정보는 웹 브라우저의 개발자 도구로 확인할 수 있다.

 

이처럼 스토리지 탭 화면에서 로컬스토리지 정보를 확인하면 login과 secret정보가 저장된 것을 확인할 수 있다.

이러한 정보가 보이는 이유는?
웹사이트에 XSS 취약점이 존재하는 경우에 스토리지 정보를 확인할 수 있기 때문

 

그렇다면 이제 XSS attack을 시도해 보자.

XSS 실습 페이지로 들어가서 First name 입력하는 부분에 아래와 같은 자바스크립트 코드를 입력해 보자.

<script>alert('secret: ' + localStorage.getItem('secret'))</script>

Last name에는 아무거나 입력해도 상관없다.

그러면 이처럼 로컬 스토리지에 있던 secret값인 Anybugs? 가 출력이 된다!

이러한 방식으로 로컬 스토리지 데이터에 접근할 수 있다는 것을 확인할 수 있다.


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

최기 웹사이트들은 사용자의 로그인 정보를 데이터베이스에 평문으로 저장하는 경우가 많았다.

현재는 이런 일이 자주 발생하지는 않지만 아직까지 이러한 사이트들이 존재한다.

 

-실습 목표-
회원가입을 통해 추가된 사용자 패스워드가 평문으로 노출되는 상황을 확인해 보자.

이 페이지는 회원가입을 간단하게 구현한 실습 페이지이다.

그럼 회원가입을 해보자.

실무에서는 발생하면 안 되는 일이지만, 실습이기 때문에 가능하다고 가정하고 계정정보가 저장된 파일을 다운로드 해보자.

이처럼 패스워드가 평문으로 노출되고 있다..

 

 


Base64 인코딩 실습

Base64 인코딩이란 이진 데이터를 ASCII 텍스트 문자열로 변환시키는 방법이다.

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

 

-실습 목표-
Base64 인코딩이 되어 전송되는 쿠키의 내용을 burp suite의 decorder기능을 활용해서 확인해 보자.

실습페이지에 들어가 보자.

시크릿이 암호화된 쿠키로 저장되어 있다.
힌트 : 복호화를 해보자.

 

burp suite의 기능을 실행시키고 실습페이지를 새로고침을 해서 확인을 해보자.

이렇게 secret쿠키가 추가가 되어서 전송이 된다. 

이 값을 보면 Base64 인코딩이 된 문자열이 표시되어 있다. 이 문자는 디코더 기능을 이용하면 쉽게 해독이 가능하다.

오른쪽 마우스 클릭으로 secret 쿠키값을 디코더에게 보내자.

오른쪽 확인

여기서 base64로 디코딩을 해주자.

%2F는 /가 URL 인코딩 된것이므로 인코딩하기 전에 /로 변경시켜주자.

이와 같이 secret의 값을 디코딩해서 확인할 수 있게 된다.


민감한 데이터 노출 대응법

  • HTTPS 프로토콜 사용하기
    • HTTP 프로토콜로 전달되는 데이터는 쉽게 노출될 수 있기 때문에 함호화되어 전송하는 HTTPS 방식을 사용하자
  • 웹 스토리지 보호 대책
    • 로컬 스토리지에 민감한 데이터를 저장하면 노출될 가능성이 있기에 쿠키를 통해서 전달하고 해당 쿠키에 HttpOnly 플래그를 추가자하. 이런 방식으로 전달하면 자바스크립트로 해당 쿠키를 읽지 못해서 데이터를 보호할 수 있다.
  • 검증된 암호화 사용
    • 데이터를 암호화해서 저장하자.

'Web Hacking > 기타' 카테고리의 다른 글

자바 역직렬화 취약점 공격  (0) 2024.07.07
알려진 취약점을 이용한 공격  (0) 2024.07.06
접근 통제 취약점 공격  (0) 2024.07.06