각종 개인 정보
패스워드 세션 ID, 세션 토큰 등과 같은 로그인에 사용되는 정보
업무상 기밀 등 비공개로 관리되는 정보
HTTP 프로토콜을 사용하여 민감한 데이터가 전송되는 경우
민감한 데이터가 평문으로 저장되는 경우
안전하지 않은 암호화 방식을 사용하는 경우
HTTP는 웹의 근간이 되는 기술이지만, 애석하게도 현재에 와서는 기본적인 HTTP 프로토콜로 전달되는 요청과 응답 메시지들은 네트워크 스니핑이라고 하는 기법에 의해 도청될 위험이 있다.
네트워크 스니핑 : 네트워크에 전송되는 데이터를 모니터링 하는 기술
ex) tcpdump(CLI기반), Wireshark(GUI 기반)
-n : IP 주소나 포트 숫자를 호스트 네임이나 서비스 이름을 변경하지 않고 숫자 그대로 표시한다.
-i :인터페이스를 지정하는 옵션이다. -i eth1을 하면 eth1 인터페이스를 통해 전달되는 트래픽을 스니핑 한다.
-A : 사람이 알아볼 수 있는 아스키 형태의 문자열로 출력하는 옵션이다.
-s 숫자 : 표시할 내용의 길이를 지정한다. -s 0을 사용하면 길이 제한 없이 출력하도록 설정한다.
tcp : TCP 프로토콜만 출력하도록 필터링한다.
port 8080 : 8080번 포트에 대해서만 출력하도록 필터링한다.
-v : eth1에 대한 모든 프로토콜을 볼 수 있게끔 한다.
웹 사이트에서 로그인을 시도한다.
이후 tcpdump를 통해 HTTP 요청을 스니핑 한다.
그러면 위와 같이 POST 메소드의 HTTP 요청이 전달되고 있는 것을 확인함과 동시에 바디 부분을 보면 로그인 정보가 노출됨을 확인할 수 있다.
웹 스토리지에 저장된 데이터는 자바스크립트를 사용하여 읽을 수 있다.
따라서 웹 사이트에 XSS 취약점이 존재하면 공격자가 마음대로 자바스크립트를 실행할 수 있기 때문에, 공격자가 스토리지에 저장된 데이터를 읽을 수 있게 된다.
쿠키에 저장된 데이터도 자바스크립트로 읽을 수 있지만 쿠키의 HttpOnly 속성을 이용하여 읽지 못하도록 할 수 있다.
웹 스토리지는 세션 스토리지와 로컬 스토리지로 분류된다.
세션 스토리지 : 세션이 종료되면 데이터도 함께 삭제.
로컬 스토리지 : 세션이 종료되도라도 따로 삭제 요청을 하기 전까지는 데이터가 계속해서 남아있음.
위와 같이 개발자 도구를 이용해 로컬 스토리지 데이터를 확인할 수 있다.
XSS 취약점이 있다면 또한, 웹 스토리지에 저장된 정보를 알아낼 수 있다.
코드는 <script>alert('secret: ' + localStorage.getitem('secret'))</script> 인데, 여기서 localStorage.getitem() 자바스크립트 함수를 이용하면 로컬 스토리지에 저장되어 있는 내용을 읽을 수 있다.
위와 같이 간단한 회원가입을 진행한다.
그리고 Download를 눌러 계정 정보가 있는 파일을 다운로드할 수 있다고 가정하면,
그대로 패스워드가 평문으로 노출됨이 보인다.
패스워드와 같은 민감한 데이터를 단지 평문에서 알아보기 힘든 문자열로만 변경하는 것은 보안에 전혀 도움되지 않는다.
Base64 encoding : 이진 데이터를 아스키 텍스트 문자열로 변환하는 방법
대표적으로 전자우편이나 HTTP 메시지를 전송할 때 사용하는데, 파일 전송과 같이 텍스트로 표현할 수 없는 바이너리 데이터를 전송할 때 Base64로 인코딩하여 전송한다.
리눅스 터미널에서는 base64 명령어를 이용하여 base64 인코딩과 디코딩을 할 수 있다.
먼저 실습 웹 페이지에 접속한다
버프 스위트의 HTTP History를 통해 secret헤더를 보고, 해당 secret을 Send to Decoder 한다.
이와 같이 Base64 인코딩 방식은 언제든지 쉽게 다시 디코딩될 수 있는 방식이며, 암호화와 구분되어야 한다.
HTTP 프로토콜로 전달되는 데이터는 공격자에게 쉽게 노출될 수 있기 때문에, 로그인과 같은 중요한 기능은 HTTPS 프로토콜을 이용하여 데이터가 암호화되어 전송되도록 구현해야 한다.
되도록 민감한 데이터를 로컬 스토리지에 저장하는 것은 지양한다.
어쩔 수 없이 민감한 데이터를 클라이언트로부터 전달받아야 하는 경우에는, 민감한 데이터를 쿠키를 통해 전달하도록 하고 해당 쿠키에 HttpOnly플래그를 추가해야 한다.
HttpOnly 플래그 : 쿠키값이 자바스크립트의 접근을 방지하는 역할을 한다.
민감한 데이터를 저장할 때에는 데이터들을 암호화하여 저장해야 한다.
위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 작성한 글입니다.
Step11. XXE(XML 외부 엔티티) 공격 (0) | 2021.03.08 |
---|---|
Step10. 접근 통제 취약점 공격 (0) | 2021.03.08 |
Step8. 파일 업로드 공격 (0) | 2021.02.28 |
Step7. 파일 인클루전 공격 (0) | 2021.02.27 |
Step6. 크로스 사이트 요청 변조(CSRF) 공격 (0) | 2021.02.26 |
댓글 영역