| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 앱
- artifact
- 포렌식
- 소프트스퀘어드
- follina
- 문제풀이
- 3wayhandshaking
- baekjoon online judge
- 자바복습
- 안드로이드리버싱
- CTF
- 백준
- 컴공
- 메모리포렌식
- picoCTF
- suninatas
- ReverseEngineering
- 와이어샤크
- 아티팩트
- Forensic
- 버프스위트
- 볼라틸리티
- 혼자공부하는자바
- 자바입문
- pico
- 포트스캔
- 9012
- KaliLinux
- 칼리리눅스
- Burpsuite
- Today
- Total
컴퓨터공학 전공생의 보안 도전기✌
[Security FACT] 웹해킹 Week 3 본문
도메인
ip주소는 사람이 이해하고 기억하기 어렵기 때문에 각 ip에 이름을 부여한 것
컴퓨터의 이름과 최상위 도메인으로 구성
등록인의 특성에 따른 일반 최상위 도메인은 com(회사), net(네트워크 관련기관), org(비영리기관) 등.
국가를 나타내는 국가 최상위 도메인은 kr(대한민국), jp(일본), cn(중국) 등.
DNS Server
Domain Name System Server.
수많은 ip주소와 도메인 이름을 기억하는 기능과 클라이언트가 그걸 찾을 때 알려주는 기능을 함.
즉 도메인을 ip주소로 바꿔서 전달해주는 서버
호스트 이름을 ip주소로 풀이. 이메일 전달 서버 확인, ip주소를 호스트 이름으로 풀이 등의 역할을 함.
1) 클라이언트(브라우저)에서 /etc/resolv.conf 에 지정되있는 네임서버로 www.yahoo.com에 대한 요청을 전달한다.
2) 일반 네임서버는 루트네임서버의 IP주소를 기록한 'hint 파일'을 가지고 있는데 이것을 참조하여 루트네임서버에www.yahoo.com에 대한 요청을 전달한다. 루트네임서버는 최상위네임서버들의 네임서버명(NS레코드)과 IP주소(A레코드)를 가지고 있는데 이를 글루레코드(glue record)라고 한다. 이 글루레코드를 참조하여 .com네임서버를 참조하라고 응답한다(루트 네임서버는 전세계에 13개뿐이다).
3) .com네임서버에는 .com을 최상위도메인으로 사용하는 도메인들의 글루레코드를 가지고 있기에 이를 참조하여 www.yahoo.com의 네임서버를 참조하라고 응답한다.
4) yahoo.com의 네임서버는 yahoo.com 도메인에 대한 존(zone)파일을 참조하여 www.yahoo.com의 IP주소(A레코드)를 클라이언트가 최초 요청을 한 네임서버로 되돌려 준다.
5) 최초 요청을 받은 네임서버는 클라이언트에게 www.yahoo.com의 IP주소를 전송한다.
예를 들어 웹 브라우저에 주소를 입력. 그러면 로컬 dns서버, 루트 dns서버, 최상위 도메인 dns서버, 그 찾는 주소의 dns서버 순으로 이동하며 해당 사이트의 ip주소를 찾는다.
쿠키
{Key:Value} 형식
사용자가 어떠한 웹 사이트를 방문할 경우 클라이언트의 상태 정보를 로컬에 저장했다가 참조하는 용도
이름, 값, 만료일, 경로 정보로 구성
클라이언트가 페이지 요청 시에 서버가 쿠키를 생성해서 전달하고, 이걸 페이지 재요청 시에 다시 서버한테 보내서 클라이언트를 구분하고 해당 클라이언트에 대한 정보를 참고할 수 있게 함
다만 쿠키는 클라이언트에 저장되기 때문에 클라이언트는 쿠키를 조회, 수정, 추가할 수 있음
- 클라이언트가 페이지요청.
- 서버는 쿠키생성하여 클라이언트에게 전달.
- 클라이언트가 다시 그 페이지를 요청할 때 그 쿠키를 같이 전달.
- 그럼 서버는 그 쿠키에 있는 클라이언트의 상태정보를 참고해서 기능수행. ex) 자동 로그인이나 팝업창 다음부터 보지 않기 등등
세션
일정 시간 동안 같은 사용자로부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술
즉 방문자가 웹 서버에 접속해 있는 상태 자체를 말함ㄴ.
쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위한 용도
접근하기 어려운 랜덤한 문자열인 세션 ID를 부여하며, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지
브라우저를 닫거나 세션을 직접 삭제할 때만 삭제되므로 쿠키보다 보안이 좋음. 저장 데이터에 제한 없음.
- 클라이언트가 페이지 요청
- 클라이언트의 쿠키 확인, 세션 아이디 있는지 확인
- 존재하지 않으면 생성해서 전달
- 세션 아이디를 쿠키에 저장하고 이후 접속 시 HTTP 요청을 보낼 때 함께 서버로 전달 ex) 화면이동해도 로그인 유지
쿠키와 세션의 차이점
- 쿠키는 클라이언트에, 세션은 서버에 저장.
- 만료 시점이 다름.(쿠키는 파일로 유지, 세션은 브라우저 종료시 x, but 길게도 설정가능)
- 용량 제한 차이.
- 쿠키가 세션보다 속도가 빠름(세션은 서버자원을 계속 사용하여 사용자가 많을 경우 소모되는 자원이 상당함). but 보안은 세션이 더 좋음.
세션 하이재킹(Session Hijacking)
시스템 간 연결이 활성화 된 상태, 즉 로그인이 된 상태를 가로채는 것
즉 정상적으로 통신하고 있는 상태의 사용자 세션을 가로채 별도의 인증 작업을 거치지 않고 통신을 계속하는 것
공격자가 이용자의 쿠키를 훔칠 수 있으면 세션에 해당하는 이용자의 인증 상태를 훔치는 것
공격 순서
- 공격자는 Dos 공격 또는 IP Spoofing을 통해 공격 대상의 클라이언트를 무력화
- 공격 대상과 서버 간의 TCP SYN Sequence number를 추론하여 서버와의 TCP 연결 수행
- 세션 연결이 성공할 경우, 공격자는 공격 대상을 가장하여 통신 가능

종류
TCP 세션 하이재킹
TCP 시퀀스 넘버(Sequence number) 제어의 문제점을 이용.
서버와 클라이언트에 각각 잘못된 Sequence number을 사용해서 잠시 혼란을 준 뒤 공격자가 세션을 탈취하는 방식.
공격 방법
서버와 클라이언트 사이의 동기화 상태를 비동기화 상태로 만들어 탈취.

[동기화 상태]
Client_My_Seq = Server_Client_Seq
Server_My_Seq = Client_Server_Seq
[비동기화 방법]
서버에서 초기 설정 단계의 접속을 끊고, 다른 Sequence number로 새로운 접속 생성
대량의 NULL 데이터 보내기
문제점
TCP 3way handshake를 진행하여 연결할 때 Sequence number 라는 것을 주고받는다.
Sequence number
TCP 세그먼트(패킷의 기본 단위)의 연속된 데이터 번호(전송되는 세그먼트 데이터의 시작숫자 표기).
TCP 연결 과정 중 3way handshake을 할 때에 서버와 클라이언트는 서로 SYN, ACK 패킷을 주고받으며 요청, 응답을 확인한 후 연결을 진행한다. 실제 통신 시에는 굉장히 많은 수의 패킷들이 왔다갔다 할 텐데 이때 받은 패킷들이 어떤 패킷에 대한 응답인지 등을 구별할 수 있도록 사용하는 것이 바로 Sequence number와 ACK number이다.
TCP가 한 번에 보낼 수 있는 최대의 데이터량 (MSS) = 100byte, 보내야하는 모든 데이터량 = 5000byte이라고 가정
그럼 50개의 세그먼트를 생성하고, 첫 번째 세그먼트의 equence number은 0, 2번째는 100, 3번째는 200 이런 식.
ACK number는 앞으로 받아야할 다음 데이터의 Sequence number
대응 방안
- 보안에 취약한 프로토콜 사용 제한: Telnet 등 X, SSL O
- 패킷의 유실 및 재전송 증가 탐지
- 데이터 전송 암호화
- 지속적인 인증 요구
HTTP 세션 하이재킹
세션 ID를 스니핑이나 무작위 추측 공격을 통해서 도용하는 기법.
세션 ID는 사용자의 계정, 암호, IP 주소 등 여러 parameter들을 조합하여 생성함.
취약점
- 강력하지 못한 알고리즘 사용 / 너무 짧은 길이
- 계정 잠금 기능 미비: 세션 ID는 특정 횟수 이상 틀렸을 때 계정을 잠그는 것 등의 기능이 없음. 그렇기 때문에 Brute Forcing에 취약
- 무한 만료: 로그 아웃 이후에도 서버 측에서 세션 ID를 폐기하지 않고 무기한 유효 인정한다면 공격 가능
- 평문 전달: 서버->클라이언트 사이의 세션 ID 쿠키를 전달하는 방식이 비암호화 방식이라면 세션 ID가 그대로 노출 위험.
공격 방법
- 직접적인 쿠키 스니핑: 서버와 클라이언트 사이 트래픽 스니핑.
- 간접 우회 공격: 웹페이지 우회 또는 코드 삽입 후 클릭 시 정보 취득 등
- Brute Forcing
대응 방안
- 세션 ID 생성 시 충분히 큰 값, 가능한 한 추측이 불가능하도록.
- 세션 Timeout, 세션 ID 재생성 기능 사용(일정시간 이상 활동 X -> 재로그인)
- 쿠키 안의 세션ID 등을 암호화
시크릿 모드
크롬, 엣지, 파이어폭스 등의 웹 브라우저에서 은밀하게 사용할 수 있는 모드.
새로운 브라우저 세션이 생성되며, 일반적인 인터넷 창과 달리 아래 항목들이 저장되지 않음
- 방문 기록
- 쿠키 및 사이트 데이터
- 양식에 입력한 정보
- 웹사이트에 부여된 권한
그러나 인터넷 서비스 업체에서는 해당 기록을 볼 수 있음.
일반적인 브라우저의 탭들은 쿠키를 공유하는데 이 모드를 이용해 생성한 탭은 쿠키를 공유하지 않음.
같은 사이트를 여러 세션으로 사용할 수 있어, 다수의 계정으로 서비스를 점검할 때 유용
'Security > Web hacking' 카테고리의 다른 글
| [Security FACT] 웹해킹 Week 6 (0) | 2022.05.13 |
|---|---|
| [Security FACT] 웹해킹 Week 5 (0) | 2022.05.06 |
| [Security FACT] 웹해킹 Week 4 (0) | 2022.04.29 |
| [Security FACT] 웹해킹 Week 2 (0) | 2022.04.01 |
| [Security FACT] 웹해킹 Week 1 OT (0) | 2022.04.01 |