엑스키퍼란, 현제 안철수연구소(AHNLAB)보다 뛰어나다고 알려진 보안 소프트웨어 회사 지란지교소프트 에서 만든 자녀 음란물 차단/컴퓨터 사용관리 프로그램입니다.

하지만 사람이 만든것인지라 역시 취약점이 존제하는대요..

이것을 주제로 첫포스팅을 올려보겠습니다.

*본포스팅은 프로그램 디버깅을 사용하지 않은 분석입니다*


-설치과정은 생략하겠습니다.혹시 궁굼하시면 http://blog.kippler.com/82 에 들어가 보세요-



1. 프로그램 실행

엑스키퍼는 부팅이 될때 자동으로 같이 로딩되는 프로그램입니다.

허나, 다른 프로그램과 달리(백신 제외)

엑스키퍼는 안전모드에서도 자동으로 실행이 되어있습니다.

저의 상식중에 %SystemRoot%\\system32\drivers 에 디바이스 드라이버를 등록시켜놓으면, 안전모드에서도 자동실행이 된다고 알고있었습니다.

확인을 해보니...


제 생각이 맞았군요...ㅎ


위 디랙터리에 엑스키퍼의 디바이스드라이버 3개가 보입니다.

저놈들이 하는 일로는

1)프로세스 보호(prcsxkdm.exe,prcsxkman.exe,prcsxsdbman.exe,xktmprcs.exe,svcxkcore.exe 많다...;;)

2) 윈도우 부팅시 자동 실행

3) 생성값 보호(설치된 파일들,레지스트리 등등..)

등이 있습니다.

대부분 커널모드 후킹으로 수행하는것 같아 보입니다.


요놈들때문에 



이런 일들이 일어나게 됩니다..


2. hookxkpro.dll

이 dll은 하는일이 워낙 많아서 따로 적겠습니다.

이름에서부터 알수 있듯이 후킹하는데 사용되는 dll 입니다.

엑스키퍼는 프로그램 시작할때 이 dll을 모든 실행되는 프로세스에 인젝션 시킵니다.

또, 프로세스 실행을 감지해서 세로 실행된 프로세스에도 이 dll 파일을 인젝션 시킵니다.


인젝션을 시키는 이유는

1) 만의하나의 경우로 프로세스가 종료될경우를 대비하여.


윗글의 캡쳐를 보셨듯이 유저레벨에서는 엑스키퍼 프로세스를 종료시킬수 없습니다.

  

  ( 테스트 결과 디버그 불가, CreatRemoteThread - EixtProcess 실행 불가,

  TerminateProcess 로 종료 불가, 터미널서비스로 종료 불가 라는 결과가 나왔습니다.

  CreatRemoteThread-ExitProcess 의 경우는 아예 원격 쓰레드 생성이 불가합니다.

  이 이야기는 유저레벨에서 dll 인젝션도 불가능하다는 뜻입니다. )

  

그러나, 커널레벨(디바이스드라이버를 이용해)ZwTerminateProcess를 이용하면 강제종료가 가능합니다.

이렇게 될 경우를 대비해 winlogon.exe 의 dll은 

prcsxkdm.exe,prcsxkman.exe,prcsxsdbman.exe,xktmprcs.exe,svcxkcore.exe

들을 감시하고 있다가,

(이름으로 감시하는것 같습니다. 똑같은 이름의 프로그램을 만들어 실행시켜보니 그 프로세스도 보호가 되었습니다.)

하나라도 종료되면 자동으로 종료된 프로세스를 실행시킵니다.



2)실행 프로그램 감시


엑스키퍼는 자신을 무력화시킬수 있는 프로그램 목록을 가지고 있고, 관리자가 프로그램 실행을 차단할 수 있는  기능이 있습니다.

그리고 어떤 프로그램이 실행되면, 그프로그램에 dll을 인젝션시키고,

dll은 그 프로그램이 무력화 프로그램의 목록에 있거나, 차단 프로그램 목록에 있으면

알림창을 띄우고 프로그램을 종료합니다.


이부분에서 취약점이 발견되었습니다.

엑스키퍼가 프로그램 실행을 감지하고, 인젝션을 시키는데는 약간의 시간이 필요합니다.

그래서 어떤프로그램의 dll 인젝션을 막은체로 실행시키면 차단하지 못하고, 심지어 감지도 하지 못합니다.


밑은 언락커(unlocker)의 도우미 파일인데요, 엑스키퍼는 이 프로그램의 실행을 차단합니다.


정상적으로 실행했을때인데요, 엑스키퍼가 프로그램을 차단하고 언락커는 바로 종료되는것을 확인하실수 있습니다.




자작툴로 보호를 씌워 실행시켜본 화면입니다.

프로그램은 정상적으로 실행되었고,

엑스키퍼는 감시조차 하지 못했습니다.

보완을 하려면 프로세스 목록을 계속 감시하면서, 이미지 이름으로 비교/차단하는 방안도 게발해야 할 것 같습니다.



3)인터넷 검색 감시 및 차단

업데이트가 되기전의 엑스키퍼는 나가는 패킷과 들어오는 패킷을 감시하여 음란물이나, 유해물 검색을 차단했는데요, 이방법은 https연결을 사용하거나 암호화 연결을 사용하면 무용지물이 되어 버립니다.


그러나 현제, 엑스키퍼는 https는 물론 암호화 연결도 잘 잡아내어 차단합니다.

그 프로세스의 키보드 입력 후킹, 프로세스의 모든 문자열 감시 등의 방법을 사용했을거라 추정합니다.(어디까지나 추정일뿐입니다)

역시나, 이부분에서도 취약점이 발생하였습니다.

인터넷 브라우저의 dll인젝션을 차단하면, 유해물 차단을 하지못하며 감시도 하지 못하게 됩니다.

이를 보완하려면 패킷 스니핑이나 캡쳐링을 통한 차단방법을 개발해야할것 같습니다..



제 생각에는 거의모든 유해물 감시를 dll이 하는것 같네요...





3. 자기방어의 취약점

는, 엑스키퍼가 자기방어 면에서는 현존하는 다른 자녀관리 프로그램보다 압도적으로 우월하다고 봅니다.

하지만, 역시나 취약점이 발견되었습니다.

프로세스나, 파일I/O접근은 대단하다고 생각됩니다.

허나, 지란지교소프트에서 한가지 빠트리신것이..

메모리 접근을 차단하지 않았습니다.

프로그램 실행시 cheatengine같은 툴으로 메모리를 변경하여 오류 발생을 유도할 경우,

엑스키퍼의 메모리를 변조당한 프로세스는 군소리없이 죽어버립니다(물론 다시 살아나지요..hookxkpro.dll이란 놈 때문에) 이를 이용하여 엑스키퍼의 모든 프로세스의 메모리를 변조한후 오류 발생 유도-종료 시킨후 강제적으로 \%SystemRoot%\\Downloaded Program Files\xkv3root 를 삭제할경우 

중요 프로그램들이 삭제되고 결국 나머지 파일들도 삭제될 수 있습니다.


4.아쉬운 점

엑스키퍼는 복구기능이 없습니다.

엑스키퍼의 설치 디렉터리를 부팅시 복구하거나(업데이트있을경우 내용을 포함하여)

자신의 파일이 삭제되었을 경우 그 파일을 다시 복구할 수 있으면 좋을것 같습니다




이로써 2012-05-19 (토) 의 첫 포스팅을 마치겠습니다

이 포스팅은 앞으로 변경사항에 따라 업데이트될 예정입니다.

잘못된 것이 있으면 댓글 남겨 주세요.



2012-05-19 :: 1차 작성 완료


+ Recent posts