본문 바로가기
OS & Infra/Windows

IIS Log - LogParser [NCSA]

by Dev. Jkun 2012. 3. 21.
반응형

출처 : http://blog.naver.com/kimgudtjr/140107878704
 

[ NCSA 로그분석 ]

 

NCSA는 W3C와 다르게 아래의 필드를 사용해야만 logparser를 이용한 분석이 가능하다.

 

--------------------------<NCSA 분석을 위한 logparser 사용필드>-------------------------

--------------------------------------------------------------------------------------
필드   설명
--------------------------------------------------------------------------------------
host  웹 페이지에 접속한 사용자 IP를 남기며, 호스트 명 혹은 서브 도메인 명이 기록되기도 한다.
(RemoteHostName)

username 인증에 사용되는 사용자 정보(계정 등)가 기록된다.

date:time  웹 페이지를 요청한 날짜와 시간정보를 남기며 해당 필드는
  [dd/MMM/yyyy:hh:mm:ss +-hhmm] 형태를 보인다.
  - dd는 일자
  - MMM는 월
  - yyyy는 연도
  - hh는 시각
  - mm는 분
  - ss는 초
  = +-hhmm는 표준시간대(GMT 등)

request  사용자가 요청한 URL 정보이며, HTTP 메소드(GET, POST등),
  uri-stem, uri-query, HTTP 프로토콜 버전 전체가 포함된다.

statuscode HTTP 응답 코드를 표기한다.

Referer Log 경유지 정보를 나타낸다.
  예) [10/Oct/1999:21:15:05 +0500] "http://www.xxx.com/index.html"

Agent Log  웹 사이트에 접속한 사용자의 웹 브라우저 정보(타입, 버전 등)를 나타낸다.
  예) "Microsoft Internet Explore -6.0"

Error Log  웹 서버 오작동에 대한 정보를 포함하며 특히 파일이나 이미지들의 링크 오류나
  CGI 프로그램의 비정상 내용 등을 표기한다.
  (error_log 파일에 저장된다.)

--------------------------------------------------------------------------------------

 

======== W3C 로그 포맷 ========

 

200X-XX-XX 06:45:34 10.1.1.10 GET /DealofWeek.asp ProdId=1  200
----------  -------    ------     ---          ---------------     -------                     ---
        (1)                       (2)              (3)        (4)            (5)                      (6)                   (7)


(1) 날짜(연/월/일)

(2) 시각(GMT+9가 대한민국 시각입니다.)

(3) 사용자 IP

(4) HTTP Method

(5) 요청 페이지

(6) 요청 페이지에 따라오는 파라미터

(7) 응답 코드


======== NCSA 로그 포맷 ========

 

200X-XX-XX 06:45:34 10.1.1.10     GET /DealofWeek.asp ProdId=1  200
-------------------               --------      ---------------------------------                  -----
            (1)                                   (2)                                    (3)    (4)


(1) 날짜와 시각

(2) 사용자 IP

(3) URL(메소드+페이지+파라미터)

(4) 응답 코드
------------------------------------------------------------------------------------

두 형태는 같은 정보를 포함하고 있으나, 표기 방법에는 차이가 있다.


======== 접속 날짜 ========

W3C 포맷 : 2007-06-27 05:56:01

NCSA 포맷 : [06/Jun/2007:00:01:06 +0100]


======== 메소드, 요청 페이지, 파라미터 ========

<W3C 포맷 : 3개의 필드로 구분>

GET Login.asp  id=xxx&password=xxx
----         --------                  --------------------
 (1)                 (2)                                     (3)

<NCSA 포맷 : 메소드, 요청 페이지, 파라미터를 1개의 필드로 사용>

GET Login.asp id=xxx&password=xxx
----------------------------------
                         (1)

------------------------------------------------------------------------------------


그러면 이번에는 Logparser 로 NCSA 포맷을 분석해보자.

500번 에러 코드 추출 요청

logparser "SELECT RemoteHostName, DateTime, Request, StatusCode FROM c:\windows\system32\Logfiles\W3SVC1\*.* to c:\aaa.csv" -i:NCSA -o:CSV


유닉스 시스템에서 생성되는 NCSA 로그는 grep, find 등의 명령어를 이용할 수 있으나, logparser를

시용하고자 한다면 윈도우 시스템으로 웹 로그를 내려받아 사용하도록하자.

(윈도우 시스템으로 웹 로그를 어떻게 내려 받지 -0-? 아시는 분 댓글점..)

 

----------------------------------------------------------------------------

[ 기타 유용한 분석 방법 ]


1. 웹 콘텐츠 디렉터리 (C:\inetpub\wwwroot\*.*)에 새로 생성된 악성 파일을 검사하고자 할 때 사용 된다.

===> logparser -i:FS "SELECT TOP 20 Path, CreationTime FROM c:\inetpub\wwwrot\*.* ORDER BY CreationTime DESC" -rtp:-1

2. 웹 콘텐츠 디렉터리 (C:\inetpub\wwwroot\*.*)에 파일 변조 여부를 검사하고자 할 때 사용한다.

===> logparser -i:FS "SELECT TOP20 Path, LastWriteTime FROM C:\inetpub\wwwroot\*.* ORDER BY LastWriteTime DESC" -rtp:-1


3. 시스템 침해 영향을 미칠 수 있는 공격 성공 코드(200번)를 검사하고자 할 때 사용한다.

===> logparser "SELECT DISTINCT TO_LOWERCASE(cs-uri-stem) AS URL, Count(*) AS Hits FROM ex*.log WHERE sc-status=200 GROUP BY URL ORDER BY RUL" -rtp:-1


4. 응답 코드가 200번 혹은 300번대와 500번대를 가지는 로그에서 요청 히트 수가 많은 순서대로 확장자
     (asp, exe)를 나열하고자 할 때 사용한다.

===> logparser "SELECT TO_STRING(TO_TIMESTAMP(date,time),'yyyy-MM-dd') AS Day, cs-uri-stem, Count(*) AS Total ex*.log WHERE (sc-status<400 or sc-status>=500) AND (TO_LOWERCASE(cs-uri-stem) LIKE '%.asp%' OR TO_LOWERCASE(cs-uri-stem) LIKE '%.exe') GROUP BY Day, cs-uri-stem ORDER BY cs-uri-stem, Day" -rtp"-1

5. 하루 30번 이상 동일 페이지에 접속한 사용자 IP를 확인한다.

===> logparser "SELECT DISTINCT date, cs-uri-stem, c-ip, Count(*) AS Hits FROM ex*.log GROUP BY date, c-ip, cs-uri-stem HAVING Hits>30 ORDER BY Hits DESC" -rtp:-1

6. 500번대 이상의 응답 코드가 발생한 파라미터를 확인한다. (특히 SQL Injection 공격 시도 등을 확인할 때

사용할 수 있다)

===> logparser "SELECT cs-uri-query, Count(*) AS Total FROM ex*.log WHERE sc-status >= 500 GROUP BY cs-uri-query ORDER BY Total DESC" -rtp:-1

7. 요청 히트 수 별로 확장자(asp 및 .exe)를 나열한다.

===> logparser "SELECT cs-uri-stem, sc-status, Count(*) AS Total FROM ex*.log WHERE TO_LOWERCASE(cs-uri-stem) LIKE '%.asp%' or TO_LOWERCASE(cs-uri-stem) LIKE '%.exe%' GROUP BY cs-uri-stem, sc-status ORDER BY cs-uri-stem, sc-status" -rtp:-1

8. HTTP Method 통계 분석(응답 코드가 400번 이상이며 확장자가 asp 혹은 exe인 정보)을 한다.

===> logparser "SELECT cs-uri-stem, cs-method, Count(*) AS Total FROM ex*.log WHERE (sc-status>=400) AND (TO_LOWERCASE(cs-uri-stem) LIKE '%.asp%' or TO_LOWERCASE(cs-uri-stem) LIKE '%.exe%') GROUP BY cs-uri-stem, cs-method ORDER BY cs-uri-stem, cs-method" -rtp:-1

반응형

댓글