모드 씨큐리티 로그 분석 / mod security mod_security log analysis


색깔 칠한 부분만 보면된다.


###파란색 글씨###

딱 보면 알겠지만 로그가 쌓일때 로그 ID이다. 

a~f / 0~9  8자리 랜덤 조합 그 뒤에 A, B, F, Z 등은 시간,접근방법, 탐지된 정책등의 정보가 담겨있다. 

SecAuditLogParts "ABIFHZ"  모드시큐리티 설정에 있다.

추가로

SecAuditLogRelevantStatus "^(?:5|4\d[^4])"  설정을 통해 404 등의 쓸때없는 페이지는 로그를 안 쌓을 수 있다.


###빨간색 글씨###

중요한 부분이다. 어떤식으로 접근했을때 탐지되었는지 알 수 있다.


###초록색 글씨###

어떤 정책에서 걸렸는지 알 수 있다. 



자세한건 로그 보면서 적겠지만 요약하자면


1.운영중인 홈페이지인 경우 2~4주정도의 탐지기간을 거쳐 로그를 검토하여 차단모드로 변경
ㄴ이유는 정상적인 접근도 차단 될 수 있기 때문이다. 

ㄴ만약 개발중인 사이트라면 처음부터 차단모드로 해놓고 안되는것들은 소스를 수정 & 정책을 주석하면 된다.


2.로그 분석은

먼저 파랑색 부분에서 동일한 로그끼리 보고 
빨간색 부분 체크하여 정상/비정상 유무 판단, (본인이 못하면 관리자, 개발자, 홈페이지 운영자등이 확인 가능)

정상이라면 초록색 부분에서 정책적용되지 않도록 해당 라인을 주석 / 비정상이라면 걸려서 접근 안된거니까 냅두면되고..





--892b4e44-A--   접근 시간 / 아아피등의 정보

[11/Aug/2017:13:44:57 +0900] WY02SX8AAAEAAAucFrcAAAAa 0.0.0.0 49410 0.0.0.0 443

--892b4e44-B-- 접근 URL 

GET /test/test.html?jb_type=G&ipZe%3D6199%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2C2%2C3%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%20..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1




Host: rsync.net

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Accept-Encoding: gzip, deflate, br

Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4

Cookie: ACEUCI=1; PHPSESSID=a68fb899645d3c714231582cdd838ede; new_connect=0.0.0.0; ACEFCID=UID-598BEEBEC8E8787061A4F93F; ACEUCI=1; wcs_bt=s_23983

7b585db:1502424521

###Cookie 부분에서 php 세션 아이디 확인 가능### 만약 비정상적인 접근이라면 아이피확인하여 차단시켜도 좋다.


--892b4e44-F--

HTTP/1.1 200 OK    

###이부분 체크해야한다. 404 인지 400인지 혹은 200인지...  404나 403 처럼 파일이 없거나 퍼미션 denied 면 어차피 접근이 안된거라 상관없겠지만 200 이면 접근이 돼기는 했다는 거

X-Powered-By: PHP/5.2.17

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-cache, must-revalidate

Pragma: no-cache

P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: POST, GET, OPTIONS

Access-Control-Allow-Headers: X-Requested-With, X-Prototype-Version

Keep-Alive: timeout=30, max=1000

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/html; charset=utf-8


--892b4e44-H--

Message: Warning. Pattern match "/etc/passwd" at REQUEST_URI. [file "/usr/local/apache/conf/mod_security.conf"] [line "300"]

##어느 정책에 걸렸는지 확인 가능하다. 위 내용은 /etc/passwd 라는 패턴이 URL에 들어가서 mod_security.conf 파일의 300째 라인의 정책에 탐지됐다는 내용

Message: Warning. Pattern match "\.\./" at REQUEST_URI. [file "/usr/local/apache/conf/mod_security.conf"] [line "306"]

##마찬가지로 URL에 ../ 라는 특문이 포함돼있어 306 라인의 정책에 탐지됐다.


Stopwatch: 1502426697568606 27545 (118 559 -)

Producer: ModSecurity for Apache/2.5.12 (http://www.modsecurity.org/).

Server: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips DAV/2 PHP/5.2.17


--892b4e44-Z--


위 로그를 정리하자면


http://naver.com/../../../etc/passwd 로 접속했기 때문에 ../ 와 /etc/passwd 두가지 정책에 걸려서 로그가 쌓인거다. 
보통 도메인 홈디렉토리는 /home/계스트명/www 처럼 어느정도 유추가 되기 때문에(실제 절대 경로도 확인 할 수 있음) 위와같이 http://naver.com/../../../etc/passwd 도메인을 접속하게 되면 서버에서는

/home/계스트명/www/../../../etc/passwd 파일을 확인 할 수 있다.





######################

#!/bin/sh


err_num1=`grep "HTTP/1.1 404 Not Found" 2017.log_line | awk '{print $1}'`



for i in $err_num1;

do


err_num=`expr $i - 1`


sed -n  $err_num'p' 2017.log >> err_name1.txt

done


ERR=`cat err_name.txt`


for i in $ERR; do


echo $i


ERR_Z=`echo -ne "--"$i"-Z--"`

ERR_A=`echo -ne "--"$i"-A--"`



echo $ERR_Z 

echo $ERR_A



sed -i "/$ERR_A/,/$ERR_Z/d" 2017.log



done

#########


위 스크립트는 불피요한 로그들 삭제하는거 

404 나 낫 파운드는 어차피 파일이 없는거기 때문에 정상적인 접근일 수 가 없다.




사실 모드시큐리티 로그는 비정상적인 접근을 확인하고 해당 아이피를 차단하는것도 있겠지만

그것보다는 정상적인 접근을 확인해서 서비스중인 홈페이지에 장애가 되지 않도록 설정하는데 더 의미가 있다고 봄

'job > apache' 카테고리의 다른 글

apache 오래된 버전 이전  (0) 2018.09.03
아파치 모듈 설명  (0) 2018.09.03
apache module forensic log 설정  (0) 2018.08.31
mod_xsendfile 설치 하기  (0) 2018.08.31
아파치 로그에 PID 쌓기  (0) 2018.08.31

+ Recent posts