Security/보안관제

http 헤더 및 DDoS 관련

NOG 2024. 3. 22. 16:06

 

- 보통 관제는 탐지패턴에 의해 탐지하는 형태이다보니 무엇이든 정오탐을 빠르게 판별하는 게 우선이다.

- 가장 위험한 것으로 생각되는 공격은 DDoS, 랜섬웨어, 파일 업로드 취약점(특히 웹 쉘), 파일 다운로드 취약점 이다.

 

HTTP 헤더 관련

 

Host

요청이 어떤 호스트(서버)로 가야 하는지를 지정

 

Referer

요청이 발생한 페이지의 URL 링크로 사용자가 현재 페이지에 도달하기 전에 방문한 페이지의 URL이다.

링크를 클릭하여 웹페이지로 이동하면 Referer이 표시되며 북마크나 주소창에 URL을 입력하는 경우는  이 헤더가 존재하지 않는다.

 

X-Fowarded For

HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 실제(원) IP 주소를 식별하는 사실상의 표준 헤더다.<client> <proxy> <proxy> 이런 형식으로

하나의 요청이 여러 프록시들을 거치면, 각 프록시의 IP 주소들이 차례로 열거된다. 즉, 가장 오른쪽 IP 주소는 가장 마지막에 거친 프록시의 IP 주소이고, 가장 왼쪽의 IP 주소는 최초 클라이언트의 IP 주소다.

User-agent

클라이언트가 사용하는 브라우저, 운영체제, 소프트웨어, 하드웨어 등에 대한 정보

 

Content-type

본문의 데이터 형식

요청 본문이 있는 메소드( POST, PUT, PATCH) 에서는 필수적으로 본문 데이터 형식을 명시하여 데이터 해석 방식을 명확히 정의해준다.

 

Cookie

클라이언트 측에 저장된 작은 데이터로

세션 관리(로그인 상태 유지) 나 트래킹 및 광고(방문패턴 및 맞춤형 광고)에 사용된다.

ex) sessionID=xxxxxSecure 플래그로 HTTPS 연결시에만 전송되도록 하거나 HttpOly 플래그로 자바스크립트에서 접근하지 못하게 할 수 있다.

 

Sec-Fetch

Host: abc.com
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

 

웹 브라우저가 서버에 요청을 보낼 때 사용하는 보안 관련 HTTP 헤더 중 하나

Sec-Fetch-Dest : 요청하는 리소스의 타입 ( document, image, style, script, font 등)

document : html 문서

style : css 파일

script : Javascript 같은 스크립트파일

font : 폰트 파일

empty : 리소스 없는 빈 요청

 

Sec-Fetch-Mode : 요청의 모드 ( cors, no-cors, same-origin, navigate 등) 즉 서버가 어떻게 요청을 처리할 지

cors : CORS가 필요한 요청. 다른 도메인(다른 출처)에 위치한 API를 호출할 때

no-cors : CORS 정책을 준수하지 않아도 되는 요청, <script>로 외부 자바스크립트 파일 요청할 때

same-origin : 동일한 출처(도메인,프로토콜,포트까지 같음)에서 발생

navigate : 사용자가 URL을 클릭하거나 입력하여 새 문서를 로드 즉 페이지 전체를 로드하기 한 탐색 요청

 

 

Sec-Fetch-Site : 요청의 출처 ( same-origin, same-site, cross-site 등)

same-origin : 동일한 출처(도메인,프로토콜,포트까지 같음)에서 발생

same-site : 요청이 동일 도메인 & 다른 서브도메인에서 발생 sub.abc.com

cross-site : 요청이 다른 도메인에서 발생

none : 출처와 관련이 없거나 정보를 제공하지 않는 경우

 

Sec-Fetch-User : 요청이 사용자의 동작(클릭이나 스크롤)에 의해 발생했는지 (?1 나  ?0)

 

X-

개발자들이 필요에 따라 추가한 비공식 또는 사용자 정의 헤더

 

Cache-Control

캐싱을 어떻게 제어할지를 나타낸다.

 

  • public: 리소스가 모든 사용자에게 캐시될 수 있다.
  • private: 리소스가 특정 사용자에게만 캐시되어야 한다.
  • no-cache: 클라이언트가 캐시된 리소스를 사용하기 전에 서버에 확인해야 한다.
  • no-store: 리소스를 캐시하지 말라는 지시로, 항상 서버에서 직접 가져와야 한다.
  • max-age=seconds: 리소스가 캐시될 수 있는 최대 시간을 초 단위로 지정한다. 이 시간이 지나면 캐시는 만료된다.
  • s-maxage=seconds: 공유 캐시(예: 프록시 서버)를 위한 최대 시간을 지정한다. 이 값이 설정되면 max-age보다 우선한다.

https://it-eldorado.com/posts/f1f0d9a7-1840-45e6-8340-2d45a4c3becc
https://blog.naver.com/malza321/221501835196
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control

 

/*

max-age: 0 은 해당 리소스가 즉시 만료되었음을 의미한다. 수명이 다해 서버에게 검증(Validation) 요청을 보내도록 강제하는 것

*/

 

C2 IP : Command & Control 서버’는 명령 및 제어, 공격자가 초기 침투에 성공한 장치와의 통신을 유지하는 데 사용되는 IP이다. HTTP 패킷에서 curl 이나 wget 뒤의 IP나 도메인 등 모두 포함될 수 있다.

 

/*

 curl 은 url에 요청하는 명령어인데 파일을 출력하거나 다운로드 등 url을 가지고 할 수 있는 모든 것을 할 수 있다고 한다.

ACL : 운영장비 혹은 웹 서버에 대한 접근 제어 목록에 차단하고자 하는 정보를 설정하여 차단

*/

 

 

PoC (Proof of Concept)

 

취약점을 이용한 공격이 가능함을 보여주는 시현 소스코드

취약점을 발견한 후 이것이 실제로 동작하며 예상대로 가능한지 확인한다

 

공격가능한 지 여부를 보여주는 익스플로잇(침투) 코드를 말하는 것이다.

코드를 특정언어로 작성해서 poc 코드를  github 같은 저장소에 올려 공유하는 것 볼 수 있다.

 

POC 재현하는 과정은 많은 블로그를 통해 확인할 수 있다.

취약점을 통해 공격이 가능한 것이 보여준다면 POC는 페이로드가 될 수도 있고 어떤 특정 파일이 될 수도 있다.

 

DoS / DDoS / DRDoS

DoS는 단일 클라이언트 → 특정 서버에 수행하는 공격 (1:1)

DDoS는 다수 클라이언트 (Botnet으로 감염시킨 PC들) → 특정 서버에 수행하는 공격 (N:1)

DRDoS는 반사체를 활용한 UDP 디도스 공격 => 초대용량 공격 가능

 

대응방안으로는 대표적으로 초당 N개 이상의 패킷 인입 시 차단하는 임계치 기반의 차단 방식을 사용한다.

 

DDoS 공격 종류

 

① 대역폭 공격 :  서버가 보유한 회선 대역폭 가득 채운다. 일시적인 대량의 트래픽 발생 (주로 UDP)

-UDP Flooding : UDP 프로토콜의 비연결형 (connectionless) 특성을 악용한 공격

-ICMP Flooding : 대량의 ICMP Request 패킷을 생성해 전달하여 피해서버의 대역폭을 고갈시키는 공격 

 

/*

ICMP는 장치간 연결을 진단하는 ping 명령에 대표적으로 쓰이는 프로토콜로서 주로 ICMP Request와 Reply를 사용

*/

 

-DRDoS (Reflection) : 공격대상의 IP로 변조하여 대량의 요청을 보내면 (서비스를 제공하는 특정한 서버를 반사서버로 사용한다. 즉 봇넷이 아닌 반사서버로부터 트래픽이 오는 것) 증폭된 응답 값이 오게 하여 대역폭을 차게하는 방식

 

프로토콜별 반사공격 포트번호(UDP) 비고
DNS  53 도메인 이름과 IP 주소를 서로 변환
NTP  123 Network 시간(Time) 동기화를 위해 사용
CLDAP  389 네트워크상에서 디렉 토리를 연결/검색/수정하기 위해 사용
SSDP  1900 PnP 장치(모바일 기기나 프린터)를 탐색할 때 주로 사용되는 프로토콜로서 네트워크상의 다른 장치를 찾거나 알림.
SNMP  161 네트워크 장치(라우터,스위치,서버등) 를 원격으로 관리하고 모니터링할 때 사용
TFTP  69 사용자 인증 없이 단순하게 기본 파일 전송 기능을 제공

 

 /*

일반적인 DDoS 공격과는 반대로 Source port가 고정된다.

해당 포트로 들어온다고 해당 공격으로 확정 시하지 말 것

*/

② 자원 소진 공격 : 자원을 소모시켜 서버 과부하 (주로 TCP, 평소보다 많은 SYN,ACK)

TCP flooding : TCP의 구성 요소를 섞어서 수행하는 공격

 

1.SYN flooding : 대량의 syn flag 보내고 syn/ack에 대한 응답은 주지 않아 서버의 RAM을 꽉차게 하여 피해 서버의 자원을 소모하게 만드는 공격

2. ACK flooding :대량의 ack 패킷을 보내서 자원을 소모하게 만드는 공격

 

/*

ack -> 자신이 보낸 Packet에 대한 응답인지 확인하 기 위해 서버의 자원을 소모한다.

*/

③ 웹/DB 부하 공격 : 과도한 HTTP 요청으로 웹/DB 서버의 과부하 (HTTP로 7계층 공격)

대용량 트래픽 공격

HTTP flooding : GET, POST 등 HTTP의 요청 메소드(Method)별 공격이 존재

-GET Flooding :  3 way handshake로 서버와 세션을 맺은 후 특정 페이지 혹은 데이터를 요청하는 GET request를 대량으로 요청

 

저용량 트래픽 공격 중 비정상적인 프로토콜 규칙을 이용한 공격

-Slowloris (장시간) Attack : 헤더의 개행 문자(/r/n)를 두개가 아닌 하나만 전송하여 서버가 대기상태를 유지하게 해 서버의 자원을 잠식하는 공격

-RUDY Attack : POST 요청으로 Content-Length 헤더의 크기(전달할 데이터의 크기)를 매우 크게 설정하여 장시간 동안 조금씩 분할하여 전달

-Slow(장시간) read Attack : TCP의 window size를 매우 낮게 설정하여 데이터를 버퍼에 많이 저장 못하게 하여 Connection을 오래 유지하는 공격

 

/*

디도스_공격_대응_가이드_최종본 (KISA 참고) 

 안랩 실전 대응 가이드

https://image.ahnlab.com/img_upload/product/2312232741645112.pdf

*/

 

DDoS 인증 기반 대응 

 

/ TCP Syn cookies

 최초 클라이언트(Client)의 SYN 패킷에 일종의 쿠키(COOKIE)를 추 가한 SYN / ACK 응답을 생성하여, 쿠키가 포함된 ACK가 전송되는지 확인하는 방법

 

/ TCP Reset

3Way-Handshake 후 RST 패킷을 보내 세션을 끊고 재연결 (Syn) 통신 하는지 인증하는 방법

 

/ HTTP Redirection

HTTP 요청에 대한 리다이렉션(302)이 정상적으로 진행되는지 확인하고 원래 URL로 접속시킨다.

 

 

http://www.itdaily.kr/news/articleView.html?idxno=55543

https://image.ahnlab.com/img_upload/product/2312232741645112.pdf

 

 

이중화 구성 ( High Availability (HA) 구성)

 

-마스터(Master) 슬레이브(Slave) 구성

주노드(Master)는 쓰기 작업을 처리하고 데이터베이스의 원본 데이터를 유지한다.

복제 노드 (Slave Node)는 읽기 작업을 처리하며, 주 노드의 데이터를 복제하여 유지한다.

읽기 작업을 복제 노드에서 처리하여 주 노드의 부하를 줄이고 데이터베이스의 복사본을 유지하여 안전성을 높인다.

/*

경우에 따라 장애 발생 시 Slave Node가 작동하게도 하는 것 같다.

*/

 

-Active Standby 구성

트래픽이 2번장비로 옮겨져 커지면 1번 장비에 문제가 생겼다는 것이니 확인필요

 

Failover (장애조치)

장비가 이상이 생겼을 예비 시스템으로 자동 전환되는 기능

 

Healthcheck

서버의 상태를 주기적으로 확인하여 서버의 정상 작동 여부를 판단하는 과정

 

GSLB (Global Server Load Balancing)

DNS에서 발전된 개념으로

(전세계에) 지리적으로 분산된 여러 데이터 센터나 서버 간에 트래픽을 분산시키기 위한 로드 밸런싱 기술

자원을 요청하는 사용자가 가까운 위치에 있는 공유 캐시 서버의 IP에 연결되도록 DNS 서버 구현하여 성능을 최적화

DNS처럼 단순 Round Robin 방식으로 매핑해주는 것이 아닌 서버 상태와 응답성이 높은 서버로 매핑해준다.

글로벌 특정 지역에 집중되는 트래픽을 적절한 데이터 센터 라우팅하여 분산하는 DNS 기반의 로드밸런싱 기술

 

 

CDN (Content Delivery Network)

웹 콘텐츠를 더 빠르고 효율적으로 사용자에게 전달하기 위해 지리적으로 분산된 여러 서버로 구성된 네트워크

 

CDN은 주로 정적 컨텐츠(이미지, CSS, JS파일 )를 캐싱

여러 사용자들이 자원을 가져다 쓸 수 있는 일종의 공유(Shared) 캐시라고 볼 수 있다. 즉, 여러 사용자들에 의해 재활용될 수 있는 자원들이 저장되는 곳

CDN을 구성하는 공유 캐시 서버가 여러 지역에 분산되어 있으며, 그렇게 분산되어 있는 공유 캐시 서버들(엣지서버)이 자원을 가져오는 실제 웹 서버는 따로 있다. 

 

'Security > 보안관제' 카테고리의 다른 글

webdrive 악성코드 분석보고서  (0) 2023.04.13
Snort와 Snort Rule Signature  (0) 2023.03.02
악성코드샘플 분석 (2)  (2) 2023.02.15
악성코드 샘플 분석  (0) 2023.02.12
가상환경 구성 (Vmware 15)  (2) 2023.01.23