0x02 analysis2011.07.22 14:12



요즘 침해사고 조사가 많아 매번 손으로 작업하기 귀찮아 스크립트를 하나 만들고 있습니다.

포렌식 측면에서 보면 이미지를 떠와서 하는게 가장 좋겠지만 그럴만한 상황도 안되고

대부분(99.9%) 서비스중인 시스템에서 원격으로 붙어서 분석을 진행하고 있습니다.


웹쉘이나 악성스크립트를 찾기 위해 미리 만들어둔 파일을 가지고 grep으로 찾는 방식을 쓰고 있는데요..

모든 사이트들이 웹 폴더나 웹로그 폴더가 다 제각각이다보니 이걸 자동으로 가져올 수 있지 않을까 찾다가

C:\WINDOWS\system32\inetsrc/MetaBase.xml 이라는 파일에 IIS 관련 정보들이 들어 있다는걸 알게되었습니다. 이제서야....-_-;;

해당 파일에 IIS 관련 정보들이 다~ 들어있더군요..


구조는 대충 다음과 같습니다.



http://www.microsoft.com/korea/technet/iis/adsi2.mspx



제가 만들고자 하는 자동화된 스크립트에서 사용할 부분은 IIsWebService, IIsWebServer, IIsWebVirtualdirectories입니다.

여기에 웹 폴더와 웹로그 폴더 정보가 들어있습니다.


현재 제가 사용하고 있는 2003 서버에서 xmlstarlet이라는 프로그램으로 XML 엘리먼트 구조를 확인해봤고 필요한 부분만 발췌하였습니다.

xmlstarlet : http://xmlstar.sourceforge.net/


C:\> xml.exe el -a C:\WINDOWS\system32\inetsrv\MetaBase.xml
...
configuration/MBProperty/IIsWebService
configuration/MBProperty/IIsWebService/@Location
configuration/MBProperty/IIsWebService/@AllowKeepAlive
...
configuration/MBProperty/IIsWebService/@HttpErrors
configuration/MBProperty/IIsWebService/@IIs5IsolationModeEnabled
configuration/MBProperty/IIsWebService/@InProcessIsapiApps
configuration/MBProperty/IIsWebService/@LogExtFileFlags
configuration/MBProperty/IIsWebService/@LogFileDirectory
configuration/MBProperty/IIsWebService/@LogFilePeriod
configuration/MBProperty/IIsWebService/@LogFileTruncateSize
configuration/MBProperty/IIsWebService/@LogInUTF8
...
configuration/MBProperty/IIsWebService/Custom
configuration/MBProperty/IIsWebService/Custom/@Name
configuration/MBProperty/IIsWebService/Custom/@ID
configuration/MBProperty/IIsWebService/Custom/@Value
...
configuration/MBProperty/IIsWebServer
configuration/MBProperty/IIsWebServer/@Location
configuration/MBProperty/IIsWebServer/@AppPoolId
configuration/MBProperty/IIsWebServer/@DefaultDoc
configuration/MBProperty/IIsWebServer/@LogFileDirectory
configuration/MBProperty/IIsWebServer/@LogFileLocaltimeRollover
configuration/MBProperty/IIsWebServer/@LogFilePeriod
configuration/MBProperty/IIsWebServer/@LogFileTruncateSize
configuration/MBProperty/IIsWebServer/@LogPluginClsid
configuration/MBProperty/IIsWebServer/@ServerAutoStart
configuration/MBProperty/IIsWebServer/@ServerBindings
configuration/MBProperty/IIsWebServer/@ServerComment
configuration/MBProperty/IIsWebServer/@ServerSize
...
configuration/MBProperty/IIsWebVirtualDir
configuration/MBProperty/IIsWebVirtualDir/@Location
configuration/MBProperty/IIsWebVirtualDir/@AccessFlags
configuration/MBProperty/IIsWebVirtualDir/@AppFriendlyName
configuration/MBProperty/IIsWebVirtualDir/@AppIsolated
configuration/MBProperty/IIsWebVirtualDir/@AppRoot
configuration/MBProperty/IIsWebVirtualDir/@AspAllowSessionState
configuration/MBProperty/IIsWebVirtualDir/@AspEnableParentPaths
configuration/MBProperty/IIsWebVirtualDir/@DefaultDoc
configuration/MBProperty/IIsWebVirtualDir/@Path
configuration/MBProperty/IIsWebVirtualDir/@ScriptMaps
configuration/MBProperty/IIsWebVirtualDir/@UNCPassword
configuration/MBProperty/IIsWebDirectory
configuration/MBProperty/IIsWebDirectory/@Location
configuration/MBProperty/IIsWebDirectory/@DirBrowseFlags
...
configuration/MBProperty/IIsWebVirtualDir/@AppIsolated
configuration/MBProperty/IIsWebVirtualDir/@AppRoot
configuration/MBProperty/IIsWebVirtualDir/@AuthFlags
configuration/MBProperty/IIsWebVirtualDir/@DirBrowseFlags
configuration/MBProperty/IIsWebVirtualDir/@Path
...


붉은색으로 된 부분이 저에게 필요한 부분입니다.

configuration/MBProperty/IIsWebService/@LogFileDirectory
configuration/MBProperty/IIsWebServer/@LogFileDirectory
configuration/MBProperty/IIsWebVirtualDir/@Path
configuration/MBProperty/IIsWebVirtualDir/@Path

LogFileDirectory 엘리먼트는 각각 IIsWebService와 IIsWebServer에 존재하고 있습니다.

IIsWebService/@LogFileDirectory : IIS 디폴트 설정
IIsWebServer/@LogFileDirectory : 관리자가 로그디렉토리를 별도로 지정할 경우
IIsWebVirtualDir/@Path : IIS 홈 디렉토리 경로

IIsWebService는 IIS 서비스 자체에 대한 글로벌한 설정이 있고
IIsWebServer, IIsWebVirtualDir은 IIS 웹서버가 1개 이상 존재할 경우 각각마다에 대한 설정이 있습니다.


MetaBase.xml 파일에서 이해를 돕기 위한 부분을 직접 보시겠습니다.

 <IIsComputer    Location ="/LM"

<IIsWebService    Location ="/LM/W3SVC"
                  LogFileDirectory="C:\WINDOWS\system32\LogFiles"

<IIsWebServer    Location ="/LM/W3SVC/1"
                 LogFileDirectory="D:\log"

<IIsWebVirtualDir    Location ="/LM/W3SVC/1/ROOT"
                     Path="C:\Inetpub\wwwroot"

<IIsWebServer    Location ="/LM/W3SVC/1798844755"
                 LogFileDirectory="C:\WINDOWS\system32\LogFiles"

<IIsWebVirtualDir    Location ="/LM/W3SVC/1798844755/root"
                     Path="D:\web"


스크립트 작성시에는 perl을 이용해서 필요한 부분만 추출해서 점검대상 IIS 서버의 웹 폴더와 웹로드 폴더가 어디인지

확인한 후 해당 폴더 하위에서 웹쉘이든 특이한 웹로그든 뒤지게끔 하면 되겠습니다.


perl -ne "print if /^<IIsWebServer/../^<\/IIsWebServer/" C:\WINDOWS\system32\inetsrv\MetaBase.xml | grep LogFileDirectory | gawk -F\" "{print $2}




그럼 이만 또 삽질하러~ :)








Posted by demantos

댓글을 달아 주세요