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

'OS > Windows' 카테고리의 다른 글

Visual Studio 2010에 SVN 연동하여 사용하기  (0) 2013.05.30
IIS 7.0 이미지 링크 방지 - web.config - URL Rewrite  (0) 2013.03.26
IIS Log - LogParser [NCSA]  (0) 2012.03.21
프롬프트 창 크기 변경  (0) 2012.03.21
IIS Log - Log Parser  (0) 2012.03.21
IIS 로그분석 - LogParser  (0) 2012.03.21
Microsoft Log Parser 2

Log Parser 2.0 is a versatile tool that you can use to perform many tasks related to log files, including filtering entries, converting log files to other formats, and performing data mining. The tool supports many different input formats, including all of the Internet Information Services (IIS) log file formats, and it supports multiple output formats, including text files and database tables. Log Parser is available as a command-line tool and as a set of COM objects that support scripting.

Log Parser works by running Structured Query Language (SQL)-type queries against source files. The tool can then write the query results to different target files, including text files and database tables, or it can print the results to the screen.

You can use Log Parser to perform many different log-related tasks, including the following:

  • Quickly search for data and patterns in files of various formats
  • Create formatted reports and XML files containing data retrieved from different sources.
  • Export data to SQL tables. You can export entire files or filter the data to obtain only relevant entries.
  • Convert data from one log file format to another

Log Parser supports the following input formats:

  • IISW3C: This is the IIS W3C Extended log file format.
  • IIS: This is the IIS log file format.
  • IISMSID: This is the log format for files generated by IIS when the MSIDFILT filter or the CLOGFILT filter is installed.
  • NCSA: This is the IIS NCSA Common log file format.
  • ODBC: This is the IIS ODBC format, which sends log files to an ODBC-compliant database.
  • BIN: This is the IIS binary log file format.
  • URLSCAN: This is the format for URLScan logs.
  • HTTPERR: This is the IIS 6.0 HTTP error log file format.
  • EVT: This is the Microsoft Windows Event Messages format.
  • TEXTWORD: This is a generic text file, where the TEXT value is any separate word.
  • TEXTLINE: This is a generic text file, where the TEXT value is any separate line.
  • CSV: This is a comma-separated list of values.
  • W3C: This is a generic W3C log file, such as a log generated by Windows Media Services or Personal Firewall.
  • FS: This provides information about file and directory properties.

Log Parser supports the following output formats:

  • W3C: This format sends results to a text file that contains headers and values that are separated by spaces. 
  • IIS: This format sends results to a text file with values separated by commas and spaces.
  • SQL: This format sends results to a SQL table.
  • CSV: This format sends results to a text file. Values are separated by commas and optional tab spaces.
  • XML: This format sends results to an XML-formatted text file.
  • Template: This format sends results to a text file formatted according to a user-specified template.
  • Native: This format is intended for viewing results on screen.

Log Parser

'OS > Windows' 카테고리의 다른 글

IIS Log - LogParser [NCSA]  (0) 2012.03.21
프롬프트 창 크기 변경  (0) 2012.03.21
IIS Log - Log Parser  (0) 2012.03.21
IIS 로그분석 - LogParser  (0) 2012.03.21
윈도우 환경에서 MySQL 방화벽 포트 설정  (4) 2011.12.19
SQL Server 2008 설치 오류 [역할관리도구]  (0) 2011.12.13
일하면서 실무중에 구글링으로 배우는게 참 많은것 같다.
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   

출처 : http://kaizer.co.kr/5

현재 한대의 서버에
 Virtual Host로 여러 사이트가 운영 중이다.

한대의 서버 자원으로 여러 사이트를 운용하므로 자원 낭비를 막을 수는 있지만 장애발생시
원인을 파악하는 데는 많은 시간이 필요로 하는 단점이 생기게 됩니다
.

이런 단점을 보완하고자 사이트 별 자원을 별도로 관리해 줌으로써 장애시 문제가 되는 프로세스를 빠른
시간 안에 파악 대처할 수가 있습니다
.

 

1.     IIS 기본셋팅

. 시작 à 프로그램 à 관리도구 à 인터넷정보 서비스관리

 

사용자 삽입 이미지

        . 호스트네임 à 응용프로그램폴 선택

-         DefaultAppPool IIS를 셋팅하면 기본적으로 생성되는 폴이다.

-         별도의 추가나 수정을 하지 않는다면 작업관리자 창에 아래와 같이 단일 프로세스를 사용하게 된다.

 


iis6.0 에서는 HTTP프로토콜 스택을 커널단에서 처리하고,
각 사이트 마다 요청을 별도의 응용프로그램풀로 처리를 합니다
.
이 역할을 w3wp(워커프로세스)가 해줍니다

 

사용자 삽입 이미지

☞ 기본셋팅만으로 IIS을 운영한다면 여러 사이트가 기본폴에 등록되고 위에 작업관리자
창에서 처럼
 w3wp.exe하나의 프로세스사용으로 문제가 되는 사이트를 찾기는 힘들어지게 된다.

 

        . 폴 추가하기.

-         새로만들기 à 응용 프로그램 폴

 

사용자 삽입 이미지

-         폴 생성.

.  name은 가급적 사이트 도메인을 입력해주는 게 좋습니다.

. 응용 프로그램 폴생성 : 새 응용프로그램 폴에 기본 설정 사용 선택à확인

사용자 삽입 이미지

   . 아래 그림처럼 폴 name에 따른 폴이 추가 된걸 확인한다.

사용자 삽입 이미지

        
. 웹사이트 폴 등록하기.

-         웹사이트 생성한 후 폴 등록할 사이트 속성에서 홈디렉토리 탭 선택

사용자 삽입 이미지

- 
응용 프로그램 설정 à 응용프로그램 폴 à 위에 생성했던 폴선택 à 확인

- 폴 생성에 따른 w3wp.exe 자원 확인

 

사용자 삽입 이미지

- 응용프로그램 폴과 연결된 개수만큼 w3wp.exe. 프로세스가 보인다면

    폴 등록은 완료된것이다.


2. 문제되는 사이트 찾기.

- 폴에 등록이 되어 있더라도 작업관리창에서는 w2wp.exe라는 단일 name으로 프로세스가 나타나므로 좀더 세부적인 확인이 필요하다.

  

사용자 삽입 이미지

 

-         아래 커맨드 창처럼 iisapp명령을 통해 문제가 되는 PID 값을 알아낸다.

-         응용프로그램 폴 등록시 사이트 네임과 같이 하는 이유를 알 수가 있다.

-         중지하고 싶다면 작업관리창에서 프로세스 끝내기로 종료한다.

-         또는 /r 옵션을 사용하여 폴을 Recycles 시키면 된다.

 

사용자 삽입 이미지
테스트 환경
  • Windows 2008 Server R2
  • IIS 7.5 (SMTP만 6.0)
  • ASP

웹서버를 윈도우 2003 에서 2008 로 교체하는 상황이 생겨서 교체하게 되었다.
근데 잘되던 SMTP로 메일발송하는 코드가 작동오류.
해서 개인적인 생각으로는 왠만하면 2008로 교체하며 이메일로 인한 오류는 거의 이것들 일것 같은
생각이 든다.

먼저 간단하게 함수를 만들어서 테스트를 해보았다.

Public Function eMailCDOSend(MailTag, MailTitle, Sender, Receiver)
' 2008서버에서 발송하는 환경정보 설정

Dim eMailObject, eMailConfig
Set eMailObject = Server.CreateObject("CDO.Message")
Set eMailConfig = Server.CreateObject("CDO.Configuration")
Dim SchemaPath : SchemaPath = "http://schemas.microsoft.com/cdo/configuration/"

With eMailConfig.Fields
.Item (SchemaPath & "sendusing") = 2 'CDOSendUsingPort
.Item (SchemaPath & "smtpserver") = "127.0.0.1" 'CDOSendUsingPort [ServerIP]
            .Item (SchemaPath & "smtpserver") = "localhost"    'CDOSendUsingPort
.Item (SchemaPath & "smtpserverport") = "25" 'Port
.Update
End With
eMailObject.Configuration = eMailConfig
Set eMailConfig = Nothing

With eMailObject
.From = Sender
.To = "<" & Receiver & ">"
.Subject = MailTitle
.HTMLBody = MailTag
.HTMLBodyPart.Charset = MailCharSet
.Send
End With
Set eMailObject = Nothing
End Function

Dim MailSendReturnValue
MailSendReturnValue = WVP.eMailCDOSend ("<h4>발송</h4>", "발송","www.jkun.net","jkun75@jkun.net")


결과는 정상이었다. 정상적으로 결과를 반환한다.
그런데도 메일 발송에는 실패하는 것이다.
해서 다음을 확인한다. 아 그리고 SMTP 를 IIS 6.0 으로 설치하였는데 7.5 에서는 테스트를 해보지 않았다.
일단 IIS 6.0 기준으로 릴레이 제한을 확인한다.




이렇게 해서 확인했는데도 실패하는거다. 아래와 같이..
아래 메세지는 에러객체 메세지를 찍은것이다.

서버가 하나 이상의 받는 사람 주소를 거부했습니다.
서버 응답은 다음과 같습니다. 501 5.5.4 Invalid Address 
-2147220977

문제는... 받는 사람 이메일주소에 내 이름을 썼다는 것이다. 미쳐가지고.. ㅋㅋ
다시 정상적으로 이메일주소를 입력하고 테스트하니 모두 정상.

우리 모두 필요악인 삽질을 줄이는 즐거운 현상이 많아지길. ㅋㅋ
삽질보단 고민과 생각을 늘리는 쪽으로~

그리고 댓글 달아주는 센스! ㅋㅋㅋ

'Development > ASP' 카테고리의 다른 글

IIS (7.0 이하 버전 기준 확장자 매핑)  (0) 2011.04.07
XML Parse  (0) 2011.03.28
윈도우 2008서버에서 ASP로 이메일 발송 - CDO.Message  (0) 2011.01.10
VBScript Functions  (0) 2010.12.13
ABC 업로드 컴포넌트 속성  (0) 2010.12.01
ASP 날짜 관련  (0) 2010.10.06

+ Recent posts