출처 : 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

일하면서 실무중에 구글링으로 배우는게 참 많은것 같다.
IIS에서 발생한 로그파일을 편집기가 아닌 커스터마이징식으로 분석할 수 가 있다.

구글링을 하다가 찾은건데 이미 많은 사람들이 알고 있을것 같다.

LogParser  마이크로에서 만든 강력한 로그분석 툴이다. 아래와 같이 SQL 스크립트 형태로
로그를 조회가 가능하다.


이러한 형태라면 MS-SQL 과 연동할 수 있는 방법이 있지 않을까..
업무성격에 맞는 형태로 재구성하여 데이터베이스 조회가 가능토록 하면.. 좋을것 같다. ㅎㅎ


다운로드 받는 경로는 다음과 같다. <링크>

그리고 자세한 내용은  Coderant 님의 블로그에서 자세하게 볼 수 있다. <링크>
 

Logparser는 MS에서 만든 강력한 IIS, W3C, 이벤트 로그 분석툴로서 SQL 쿼리타입으로
조건별 검색할 수 있는 강력한 툴입니다.


1) 가장 최근에 생성된 시간을 기준으로 ASP 스크립트를 변조한 Trojan Files 여부를 진단
 
C:\logparser2.2\logparser -i:FS "SELECT TOP 20 Path, CreationTime FROM C:\inetpub\wwwroot\*.* ORDER BY CreationTime DESC" -rtp:-1  


2). 가장 최근에 수정된 Files 로그 찾기

C:\logparser2.2\logparser -i:FS "SELECT TOP 20 Path, LastWriteTime FROM C:\inetpub\wwwroot\*.* ORDER BY LastWriteTime DESC" -rtp:-1    
   
3). 해커가 Trojan Files을 삭제한 경우에 HTTP 200 서버코드 흔적 로그를 찾는다.
 
C:\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 URL"    -rtp:-1   
  
* nc.exe, tini.exe, root.exe, cmd.exe, upload.asp, aspexec.asp, cmd.asp 같은 파일 이름이 있으면 의심

4) Script Abuse 분석(가장 많은 Request 요청을 받은 Executable 파일의 확장자 확인)

C:\logparser -i:FS "SELECT TO_LOWERCASE(SUBSTR(Name, LAST_INDEX_OF(Name, '.'),  STRLEN(Name))) AS Extenstion, Count(*) AS Files FROM C:\inetpub \wwwroot\*.*, C:\inetpub\scripts\*.* WHERE Attribute NOT LIKE 'D%' GROUP BY Extenstion ORDER BY Files DESC" -rtp:-1  

* 특히, .ASP, .DLL 파일 요청을 유심히 봐야함

5) HTTP 서버 500 에러코드 검사

C:\logparser "SELECT [cs-uri-stem], [cs-uri-query], Count(*) AS [Hits] FROM c:\logs\web\ex*.log WHERE sc-status = 500 GROUP BY [cs-uri-stem], [cs-uri-query] ORDER BY [hits], [cs-uri-stem] DESC" -rtp:-1 -i:iisw3c
  

6) 가장 많은 Request Hit 수를 높음 ASP, DLL 파일 확인

C:\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  

7) 시간당 에러수가 가장 많이 발생한 날짜 확인
  
C:\logparser "SELECT date, QUANTIZE(time, 3600) AS hour, sc-status, Count(*) AS Errors FROM ex03*.log WHERE sc-status>=400 GROUP BY date, hour, sc-status HAVING Errors>25 ORDER BY Error DESC" -rtp:-1  

* 25개 이상의 에러코드(404코드)를 발생한 날짜와 시간 결과를 출력

8) 하루동안 50번이상 동일 페이지에 접속을 시도한 클라이언트 IP 확인
  
C:\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>50 ORDER BY Hits DESC" -rtp:-1  

9) 하루동안 50번이상 동일 페이지에 접속을 시도한 클라이언트 IP 확인
 
C:\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>50 ORDER BY Hits DESC" -rtp:-1  

10)  모든 ASP 에러 기록 확인
  
C:\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  

* 특히, ODBC와 ADO 에러는 SQL Injection 가능성이 있으므로 주의깊게 살펴봐야 함

11) 스크립트 및 Executable 파일의 HTTP 서버 코드 기록 확인
  
C:\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  

12) Win32 Status Code 분석을 통한 Attack 확인
  
C:\logparser "SELECT cs-uri-stem, WIN32_ERROR_DESCRIPTION(sc-win32-status) AS Error, Count(*) AS Total FROM ex*.log WHERE sc-win32-status>0 AND (TO_LOWERCASE(cs-uri-stem) LIKE '%.asp%' OR TO_LOWERCASE(cs-uri-stem) LIKE '%.exe%') GROUP BY cs-uri-stem, Error ORDER BY cs-uri-stem, Error" -rtp:-1 
  

13) HTTP Method 통계 분석
  
C:\logparser "SELECT cs-uri-stem, cs-method, Count(*) AS Total FROM 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 cs-uri-stem, cs-method ORDER BY cs-uri-stem, cs-method" -rtp:-1   

+ Recent posts