모드 씨큐리티 로그 분석 / 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 |