Search results

'Hacking/Study'에 해당하는 글들

  1. 2010/01/26  ARM Shellcode (2)
  2. 2009/09/24  HackJam 2009 After thoughts (1)
  3. 2009/07/09  DDOS 란 무엇인가~ 파헤쳐보자! (3)
  4. 2009/05/10  Null@Root 3차 문제 및 풀이
  5. 2009/04/22  Null@Root 2차 문제 및 풀이 (2)
  6. 2009/04/22  Null@Root 1차 문제 및 풀이 (2)
  7. 2009/04/12  [Tool] ProcessExplorer
  8. 2009/04/12  [Tool] Dependency Walker
  9. 2009/04/12  [Tool] Disasm Viewer (4)

ARM machine이 많은데도 불구하고, x86나 mips 아키텍쳐에 비해서 ARM 쉘코드는 온라인에서 찾기 어렵습니다..

하쥐만 상길이형님께서 간지나게 ARM PoC shellcode를 뽑아내셨습니다 ㅋㅋ
(qemu-arm 에서 돌아가는것 확인!)

원문:
It is hard to find a very simple ARM shellcode. So I decided to make my own ARM shellcode.

ARM is becoming more and more popular architecture as the number of smart phones and 'net books' are expanding. Don't forget! iPhone and Nokia tablets are also running on ARM. :D

So what is the most important thing to consider to generate ARM shellcode?

First, the linux system call in ARM is little bit different from the x86 system call. Namely, the system call number is stored in r7 register instead of r0 register. (eax register can be considered as r0 in ARM). Thus, the arguments are stored in r0, r1, ... in turn.

Second, we need some trick to load 32bit immediate value into a memory address in ARM. Here, I am using four sequential arm instructions to push 32bit immediate into stack. Note that the exclamation mark in ARM assembly code means that the index operation is performed before applying the real instruction. For example, str r2, [r3, #-4]!  means: store r2 value to the ptr {r3-4} and r3 = r3 -4.

With the above facts in mind, I will present my own ARM shellcode here !!
This is just a simple example, and it contains null characters. So not applicable in most of the real cases. :)

 (ARM shellcode, execute /bin/sh and call exit) (72 byte)  
// by funkyG
"\x00\x00\x20\xe0\x01\x10\x21\xe0\x02\x20\x22\xe0\x04\x20\x2d\xe5\x00\xc0\x9f\xe5\x00\x00\x00\xea\x2f\x2f\x73\x68\x04\xc0\x2d\xe5\x00\xc0\x9f\xe5\x00\x00\x00\xea\x2f\x62\x69\x6e\x04\xc0\x2d\xe5\x0d\x00\xa0\xe1\x0b\x70\xa0\xe3\x00\x00\x00\xef\x00\x00\xa0\xe3\x01\x70\xa0\xe3\x00\x00\x00\xef"

2010/01/26 01:41 2010/01/26 01:41
─ tag  , , ,
ARM Shellcode :: 2010/01/26 01:41 Hacking/Study

지난 주말에 Sapheads 팀이 주최한 HackJam 해킹대회가 있었습니다.

이번 해킹대회는 제게 있어서 중요한 대회라고 할 수 있겠습니다.

첫째로, CMU 보안 그룹을 결성 한 이후로 멤버들과 함께 같이 한 첫 대회였었기에 팀웍, 개개인의 실력, 각자의 강점/단점 등을 알아 볼 수 있었습니다.

둘째로, 문제의 질이 성격이 비슷한 타 대회들의 문제들보다 훨씬 잘 구성되어있었습니다. 분야별 문제가 골고루 구성 되어있었고, 후반부 문제에서는 실생활에 일어날 수 있는 시나리오식 문제가 준비되어있었습니다.

사용자 삽입 이미지


경기 초중반부터 끝나기 몇시간 전까지 1등을 유지하고있었지만..
한 문제에서 오래 걸리는 바람에.. 3등까지 내려와버렸네요..

하지만, 300+ 팀이 참가한 경기에서 3등이면 충분히 좋은 결과라고 생각하고..
다음 대회들에서는 더 좋은 성적 기대해 봅니다 :p



2009/09/24 15:56 2009/09/24 15:56
─ tag  , ,

7.7 DDoS 대란

최근 며칠 사이에 화두가 된 사건이죠.
아마 여기 오시는분들의 대부분도 이미 알고 계신 사건일겁니다.

하지만, '공격을 당해서 사이트들이 다운되고, PC들이 고장난다'는 사실 정도는 알지만,
정확히 어떤 방법으로, 어떤 목적으로 이런 공격이 실행되는지 자세히 알고있는 사람들은
그다지 많지 않으실겁니다.

이번 포스팅에서는, 제 자신의 생각정리 + 정보공유의 목적으로 DDoS가 뭔지 알아보는 시간을 가져볼까 합니다.


어딜가나, 그저 DDoS! 도대체 그게 뭔데??

DDoS는 Distributed Denial of Service 의 약자로써 한글로 번역하면 '분산 서비스 거부 공격' 입니다.

하지만, DDoS는 DoS라는 공격기법의 발전형태입니다.
그럼 DoS가 뭔지 일단 알아야겠죠?

이름에서 알 수 있듯이, DoS는 인터넷상의 특정 자원을 평소처럼 이용할 수 없는 상태를 가르킵니다. 이러한 서비스 단절은 여러가지 이유가 있을 수 있는데 보통 네트워크장애로 인한 제대로 된 서비스를 못하게 됩니다. 공격 형태는 꽤 다양한데, Buffer OverFlow (BOF) 공격, SYN Flood 공격, Eavesdrop 공격, Virus/Worm 공격 등이 있습니다.

일전의 DoS공격시절에는, 보통 한 두대의 컴퓨터로 타겟서버의 이러한 알려진 공략법으로 과다하게 트래픽을 유발하거나, 시스템마비를 일으켜서 서비스 단절상태로 만들었지만.. 곧 왠만한 방어기법 (IP blocking 등)으로 처리가 가능해지면서, DoS는 효과적인 공격방법으로써 제 구실을 할 수 없게되엇죠.

그리하여, 이 공격기법을 발전시켜 나온 것이 Distributed DoS 방법입니다.
즉, 나 혼자 공격하는게 아니고 여러곳에서 분산해서 동시다발적으로 집중 공격 하자는 아이디어였죠.



흠..이제 뭔지는 알겠는데, 어떤식으로 공격이 이뤄지는건지 궁금하다구!

추상적인 단계에서 바라보면, DDoS 자체는 그렇게 복잡한 공격기법이 아닙니다.
어떻게 보면 단순무식한 방법이죠. (그리고..대부분의 경우에서.. 단순무식방법이 가장 무섭죠..)

대충 Diagram을 그려보자면 다음과 같습니다:
사용자 삽입 이미지
그림출처: www.sans.org

이와 같은 DDos의 구조를 이해하기 위해서는 몇가지 용어를 알아야합니다.

  • Bot (Zombie) : 주로 좀비PC라고 불리는 이 집단은 보통 가정집 컴퓨터 같은 보안에 취약하고 노출되어있는 개인 PC들로 이루어져있습니다. 취약점을 이용한 침투로 바이러스/웜등을 설치하고 Botmaster의 명령을 대기합니다. 대부분의 경우에는, 사용자들은 자신들이 감염되었는지조차 알 지 못하는 경우가 많습니다. 실질적 공격이 이루어지면, 각각의 좀비PC들이 공격 도구가 되는 셈이지요.
  • Bot Master : 이름 그대로, 위와같은 방법으로 감염시킨 bot들의 주인이 되는 컴퓨터입니다. Bot들의 분산과 실질적인 공격명령을 담당하는 컴퓨터입니다. Master 컴퓨터도 보통 취약점을 이용하여 특정 서버등을 공략/침투하여 만들어집니다. Bot들은 Master로부터 명령이 떨어지면, 주어진 공격 대상을 공격하기 시작하죠.
  • Bot Network : 줄여서 Botnet이라고 불리는 이 네트워크는 말그대로 bot들과 botmaster가 이루고 있는 네트워크를 칭합니다.
  • Attacker : 흔히들 말하는 '해커', '배후세력' 입니다. 이러한 시스템을 구축한 장본인들이지요. Master의 권한으로 널리 퍼져있는 bot들에게 공격명령을 직접적으로 내리는 역할을 합니다. 예전에는 개인적인 명성, 자금조달(?)을 목표로 소규모 또는 개인이 대다수였지만.. 최근들어 조직화되고 치밀해지고 있습니다.
  • Target : 말그대로..타겟. 피해자. 희생양입니다.

용어 설명을 하면서 대충 작동원리도 설명이 된 것 같지만, 좀 더 자세히 설명하자면..

공격자는 bot 프로그램을 만들어서 감염시키므로서 최대한 많은 컴퓨터들을 자신의 botnet 안에 추가하려고 노력합니다. 어느정도 병력(?)이 모인 후에는, master를 이용하여 공격지시를 내리고, 전 세계적으로 감연된 좀비PC들은 자신들이 뭘 하고 있는지도 모른채 target을 일제히 공격하기 시작하는겁니다.

흔히 이런 메카니즘을 C&C (Command & Control) 이라고 부르는데, 초창기에는 IRC 프로토콜을 사용한 C&C모델들로 주축을 이루었다가 IRC의 한계로 인해서 HTTP나 P2P 프로토콜을 이용하는 botnet 모델이 나오기도 했습니다. [한때 시끄러웠던 Conficker worm은 HTTP를 이용한 봇넷이었고, Storm worm은 P2P (특히 overnet)을 이용한 봇넷이었습니다.]

IRC 프로토콜이야 필터해서 막아버리면 그만이었지만..
(IRC 프로토콜을 회사/기업에서 쓸 일도 별로 없을 뿐더러)
HTTP같은 경우는 차단할 수도 없는 노릇이고.. 이같은 사실을 악용한 Conficker같은 botnet 덕분에 많은 사람들이 고생을 했었죠 :(



근데, 이번 7.7 대란에서 사용된 DDoS는 이전 공격과는 다르다던데..? 뭐가?

이번 worm에 대해서 자세한 기술적인 부분은 들여다보지 않아서 모든 차이점을 말씀해드릴 수는 없지만, 이번 7.7 대란에 사용된 방법이 이전 DDoS 공격과는 확실히 다른점은 있었습니다.

일단 알려진 바로는, MyDoom 변종이 사용되어졌다고 합니다.
MyDoom은 사실 대량 메일전송으로 악명 높았던 웜이었습니다 :)

위에서 설명한 공격방법을 열심히 읽으셨다는 가정하에, 차이점을 설명하겠습니다 ^^

이번 공격에는 C&C 메카니즘이 사용되지 않았다고 합니다.
그럼 어떻게 좀비PC들이 공격을 시작했을까요? 또, 어디를 공격할지 어떻게 알았을까요?

공격에 사용된 worm을 안랩에서 분석해본 결과, uregvs.nls 라는 공격 대상 목록을 담은 파일을 '자체생성' 한 후, 스스로 공격 시간을 바꿔가면서 공격한다는 것이라는게 밝혀졌습니다.

즉, 공격자가 직접 명령을 내릴 필요 없이, 알아서 공격대상을 (정해진 룰이 있는지는 모르겠지만) 정하고, 시간도 정해서, 다른 감염된 좀비PC와 함께 새로운 리스트의 대상들을 같은시각에 일제히 공격하는 것이죠.
이러한 특성 때문에, 1차 공격 이후에 2차, 3차 와 같은 연속 공격이 일어난것입니다.

이런 공격방법은, 이전의 DDoS공격에선 보여지지 않던 방법인지라 초반에 많이 당황한듯 싶습니다.
C&C메카니즘이 아니기에, 공격자가 완벽한 명령권한을 가지고 있지는 않지만, 그 덕분에 오래 살아 남는 원인이 되기도 합니다. 대게 C&C메카니즘을 사용하는 공격방법은 BotMaster 컴퓨터의 정보를 알아내고 차단함으로서 좀비PC로 하여금 더이상의 추가 명령을 받지 않게 하여 공격을 저지하는데, 이번엔 BotMaster에게 명령을 받는것이 아닌, 자제적으로 공격하는것이기 때문에.. 마땅히 한번에 봇넷을 무력화시킬 방법이 없는것이지요.

확실하게 막는 방법은, 개개인의 좀비PC를 치료하는 방법인데.. 시간도 많이 걸리고 아무래도 쉽게 하기는 힘들겠죠..



이게 다인가?

이게 전부였으면 그나마 나았겠지만..
공격자가 정말 악질인가 봅니다.

10일 자정부터, 하드디스크의 파일들도 손상하는 루틴이 들어있다고 합니다.

'다른 기업이 피해보는거지, 내 컴퓨터가 고장나는건 아니니까~' 라는 생각으로 별다른 관심 없으셨던분들도 자신의 컴퓨터를 지키기 위해서는 신경쓰셔야된다는 뜻입니다.

파일손상에 대한 정보와 긴급 사전조치방법은 http://viruslab.tistory.com/896 에 설명되어있습니다.



이번 사건에 대한 개인적 견해

안철수 교수님께서 어제 인터뷰에서 하신 말씀처럼 "우리가 자초한 측면이 있다" 라는 말에 전적으로 동의 하는 바입니다.

그동안 우리는 'IT강국'이라는 녹슬어버린지 오래된 타이틀 아래에서 너무 안일하게 살아왔습니다.

더이상 우리나라는 IT강국이 아닙니다. 다시 그 때로 돌아가기 위해 피나는 노력과 지원이 필요합니다.

안타까운 사건이지만, 이번 일을 계기로 정부가 조금더 IT쪽에 신경쓰고 적극적 지원을 해주어서 다음번엔 이런 불미스러운 시도가 있더라도, 공격자를 향해 비웃음을 날려줄 수 있는 때가 오기를 바래봅니다.



좀 더 기술적인 부분도 추가하여 더 자세하게 쓰려고 시작한 글인데.. 생각보다 표면적인 내용만 많은것 같네요.
나중에 기회가 되면 추가하겠습니다.



2009/07/09 00:40 2009/07/09 00:40
─ tag  , , ,

에.. 오늘 아침에 3차 문제가 이메일로 왔네요 :)

다행히 문제 푸는건 아니구, 문서번역이라 부담이 덜하네요 ^^


마지막 시험 하나가 끝나자마자 번역시작해야겠군요-

사용자 삽입 이미지




2009/05/10 14:50 2009/05/10 14:50


1차 문제를 완벽하게 풀어내지 못했는데도 불구하고, 넓은 아량으로 통과시켜주신
Null@Root 관계자 분들께 감사드리며,,

1차 문제 제출 후, 약 5 뒤인 그저께 2차 문제가 이메일을 통해 왔습니다 ^^

사용자 삽입 이미지

이번 문제는 Reverse Engineering & Cryptography 네요 :)

오래걸릴 줄 알았는데, 생각보다 간단하게 풀어져서 다행이에요.. 시험기간이라 걱정했는데 ^^





후기: 아.. 다음 stage는 왠지 웹해킹 분야로 나올거 같은데.... ㅠㅠ 막막하네요.




2009/04/22 18:52 2009/04/22 18:52

Null@Root 멤버지원을 한 이후로, 서류심사는 통과 :)

통과를 알림과 동시에, 1차 심사문제가 동봉되있는 메일이 왔습니다.

사용자 삽입 이미지

이번 문제는 BOF (Buffer OverFlow) 문제였습니다.

한글 운영체제라서 unicode변환 문제 때문에 완벽하게 풀이하지는 못했지만,
영문 운영체제에서 작동하는 풀이법을 작성했습니다.






후기: unicode문제는, 노가다로 conversion해주면 된다는군요...시간 날때 해봐야겠어요 :)




2009/04/22 18:44 2009/04/22 18:44

사용자 삽입 이미지

이름:
Process Explorer

설명:
현재 실행중인 프로세스들의 상세정보를 알려줍니다.
Kill, suspend 등 여러가지 작업도 가능합니다.

다운로드:






2009/04/12 04:45 2009/04/12 04:45
─ tag  ,

사용자 삽입 이미지


이름:
Dependency Walker

설명:
로드된 프로그램의 dependency를 모니터 해주는 유틸리티입니다.
base address나 kernel 에 속한 함수들의 주소를 알아내는데 쓰입니다.

다운로드:




2009/04/12 04:36 2009/04/12 04:36

사용자 삽입 이미지


이름:
Disasm Viewer

설명:
BOF (Buffer Overflow) 공부를 하다가 유용하게 쓴 툴.
opcode를 disassemble로 변형해주거나, disassemble을 보고 opcode로 만들어주기도 합니다.

다운로드:






(32bit 운영체제에서는 vcredist_x86.exe를 설치하세요)


2009/04/12 04:30 2009/04/12 04:30
─ tag  , , , ,
openclose