정보보안개론 0x06
모바일 보안모바일 운영체제의 역사모바일 운영체제의 변천사1. 팜 OS팜 OS는 PDA에 사용하기 위해 만든것으로 팜 OS 에는 주소, 달력, 메모자으 할일목록,계산기와 개인정보를 숨기기 위한 간단한 보안툴이 포함되어 있었다.2. 윈도 CE윈도 CE는 MS가 PDA나 모바일 장치 등에 사용하기 위해 만든 운영체제이다. 초기에는 팜 OS와 마찬가지로 PDA의 운영체제로 주로 사용되었지만 이후에는 AutoPC, 스마트폰 등의 기기에 사용되었다.3. 블랙베리 OS블랙베리는 RIM(Research In Motion)에 의해 만들어진 모바일 운영체제로 메시지와 E-Mail 전송과 관련한 기능과 보안에 초점을 두고 있다. 4. iOSiOS는 애플의 아이폰과 아이패드에 사용되는 모바일 운영체제이다. 5. 안드로이드안드..
2015.01.23
no image
정보보안개론 0x05
Malicious Code (악성 코드)악성코드 : "제작자가 의도저으로 사용자에게 피해를 주고자 만든 모든 악의적 목적을 가진 프로그램 및 매크로, 스크립트 등 컴퓨터상에서 작동하는 모든 실행 가능한 형태" 악성코드의 분류 바이러스 -사용자 컴퓨터 내에서 사용자 몰래 프로그램이나 실행 가능한 부분을 변형해 자신 또는 자신의 변형을 복사하는 프로그램, 가장 큰 특성은 복제와 감염.웜- 인터넷 또는 네트워크를 통해서 컴퓨터에서 컴퓨터로 전파되는 악성 프로그램.- 윈도우의 취약점 또는 응용 프로그램의 취약점을 이용하거나 이메일이나 공유 폴더를 통해 전파- 바이러스와는 달리 스스로 전파되는 특성이 있다.트로이 목마- 바이러스나 웜처럼 컴퓨터에 직접적인 피해는 주지 않지만, 악의적인 공격자가 컴퓨터에 침투하여 ..
2015.01.22
no image
정보보안개론 0x04
Code Security시스템과 프로그램에 대한 이해1. 시스템 메모리의 구조스택 영역과 힙 영역어떤 프로그램을 동작시키면 메모리에 프로그램이 동작하기 위한 가상의 메모리 공간이 생성된다. 이떄 상위 메모리는 스택(Stack) 이라는 메모리 공간이 형성되고, 하위메모리에는 힙(Heap)이 생성된다.스택 영역은 프로그램 로직이 동작하기 위한 인자(Argument)와 프로세스 상태를 저장하는데 사용되고, 힙 영역은 프로그램이 동작할떄 필요한 데이터 정보를 임시로 저장하는데 사용된다. 스택 영역은 레지스터의 임시 저장 장소, 서브루틴 사용시 복귀주소 저장, 서브루틴에 인자전달 등에 사용된다. 스택은 메모리의 상위주소에서 하위주소로 방향으로 사용하며 후입선출(LIFO) 원칙에 따른다.힙 영역은 프로그램이 실행될..
2015.01.21
no image
0114_example.exe
0x01 기본분석패킹이 되어있지않으며 별다른 이상은 없는것 같습니다.앞부분에서 =====안녕하세요===라는 멘트가 나오며 그 후 두개의 숫자를 입력하라고 화면에 출력이 된다. 그후 입력함수를 통하여 입력을 받습니다.입력을 받은 두 숫자를 한번 출력을 한후 사칙연산을 선택하라 합니다. 사칙연산을 선택하면 앞의 입력받았던 두 숫자의 연산 결과를 출력하여 나타내주며 프로그램은 종료됩니다.시작 > 멘트 > 숫자 2개 입력 > 연산선택 > 결과 출력 > 종료 0x02 분석EBP를 기준으로 EBP-8, -14 -20 으로 3개의 4BYTE에 0으로 초기화하는 것을 알수가 있습니다.따라서 int a=0,b=0,c=0;으로 변수를 선언하고 있습니다. 0x01 분석에서 보았던 것처럼 시작과 함께 출력될 멘트를 호출 하는..
2015.01.16
no image
15.01.14-0x02 XORandShift.exe
0x01 파일을 실행했을 때의 결과 0x02 OllyDbg를 통한 접근a = ff00 으로 1111 1111 1111 1111 0000 0000 0000 0000b = 00ff 이니 0000 0000 0000 0000 1111 1111 1111 1111 입니다.이를 XOR >> 1111 1111 1111 1111 1111 1111 1111 1111 이를 Shift Left 16 으로 인하여 1111 1111 1111 1111 0000 0000 0000 0000 이 됩니다. 0x03 복원
2015.01.16
no image
Rejoice와 서버파일 분석(정적)
0x01 IP가 출력되는 스트릥 "%d.%d.%d.%d" 0x02 Capture라는 스트링이 매우 수상히 느껴짐 0x03 Sever와 Client와 관련된 스트링.tclientwinsocket WebSocket 서비스에 연결하기 위해 클라이언트를 제공 합니다.tserverclientwinsocket 개별 클라이언트 소켓에 소켓 연결에 대한 Windows 소켓 API 호출을 관리하는 서버 소켓 구성 요소에 사용 0x04 모니터와 관련된 스트링monitorfromwindow : 지정된 윈도우의 경계 사각형 만나는 가장 큰 면적을 갖는 표시 모니터에 핸들을 검색한다.monitorfrompoint : 지정된 점을 포함한 디스플레이 모니터에 대한 핸들을 검색getmonitorinfo : retrieves info..
2015.01.15
no image
Rejoice와 서버파일 분석(초기,동적)
0x01 압축의 구성요소0x02 VirusTotal을 통한 정보확인 0x03 Exeinfo PE 를 통한 분석위의 정보를 통하여 두 파일은 패킹이 되지 않은것을 확인할수가 있다. 0x04 Rejoice.exe의 기능두번째 버튼의 기능-두번째 버튼을 누르면 Generate.exe 이 출력되는 것을 확인 할수가 있다.-가장 위의 darkbyte16.ddns.net 에 서버파일을 관리할 PC의 IP를 입력하면되며 뒤의 8010은 그에 사용될 포트 번호이다. 아래의 동그라미친 부분의 버튼을 누르면 괄호표시를 한곳의 정보가 변경이 된다. 예상하자면 하나의 이름으로 유통되는 것보다 이름이 변경이 되는 것이 공격자의 입장에서는 유용하기떄문이다. 표시한 부분을 클릭하면 자신의 IP를 알수가 있다.아래의 동그라미 친 부..
2015.01.15
no image
15.01.14-0x01
#C프로그래밍 어셈블리로부터 복구 1. IDIV는 나눗셈을 하는 명령어인데 왜 인자가 하나 뿐인가?2.CVTPI2PS 는 무엇인가 대체3.스택에는 어떻게 쌓일까 라는 의문들을 가지게 되었습니다. 1.IDIB는 EAX와 연산을 한다고 Hex님이 이야기를 해주시니 앞뒤가 딱 맞는것 같습니다.EAX와 연산을 한 후 EAX로 반환한다. 2.여기서 개인적으로 중요하다싶은게 CVTPI2PS 입니다. Convert two 32-bit signed integers from MM/Mem to two SP/FP. 라고 구글링 결과 알게 되었는데생각을 해보니 정수를 저장할때는 그 공간에 그대로 채워 넣으면 되지만 실수를 저장할때는 그 공간을 나누어소수점윗부분과 아래부분으로 나누어 저장한다는 것이 기억 났습니다. 아래의 두사..
2015.01.14

정보보안개론 0x06

Kail-KM
|2015. 1. 23. 01:00

모바일 보안


모바일 운영체제의 역사


모바일 운영체제의 변천사

1. 팜 OS

팜 OS는 PDA에 사용하기 위해 만든것으로 팜 OS 에는 주소, 달력, 메모자으 할일목록,계산기와 개인정보를 숨기기 위한 간단한 보안툴이 포함되어 있었다.

2. 윈도 CE

윈도 CE는 MS가 PDA나 모바일 장치 등에 사용하기 위해 만든 운영체제이다.  초기에는 팜 OS와 마찬가지로 PDA의 운영체제로 주로 사용되었지만 이후에는 AutoPC, 스마트폰 등의 기기에 사용되었다.

3. 블랙베리 OS

블랙베리는 RIM(Research In Motion)에 의해 만들어진 모바일 운영체제로 메시지와 E-Mail 전송과 관련한 기능과 보안에 초점을 두고 있다. 

4. iOS

iOS는 애플의 아이폰과 아이패드에 사용되는 모바일 운영체제이다. 

5. 안드로이드

안드로이드는 구글과 핸드폰 업체들이 연합하여 개발할 개방형 모바일 운영체제이다. 




모바일 운영체제의 보안과 취약점


iOS의 보안과 취약점

iOS의 보안 체계

iOS는 보안에 대한 기본적인 통제권을 애플이 소유하고 있으며 완전한 통제를 위해 4가지 시스템 보안체계

-안전한 부팅절차 확보 (모든 소프트웨어는 애플 암호화 로직의 서명된 방식에 의해 무결성확인후에 동작)

-시스템 소프트웨어 개인화 (아이튠즈를 통한 소프트웨어의 일괄적 배포)

-응용프로그램에 대한 서명 ( 모든 설치된 앱에 대해 코드 무결성 사인을 등록하게끔하고 있다.)

-샌드박스 활용 (응용프로그램이 실행될떄 일종의 가상머신 안에서 실행되는 것처럼 완전히독립실행)

iOS의 취약점

iOS는 보안 통제권을 철저하게 애플이 소유함으로써 비교적 안전한 것으로 알려져 있다. 하지만 꼭 그렇지 만은 않다. iOS의 보안상의 문제점은 대부분 탈옥 (JailBreak)한 기기에서 발생한다. 


안드로이드의 보안과 취약점

안드로이드의 보안체계

-응용프로그램 권한관리( 모든 응용프로그램은 일반 사용자 권한으로 실행) 

-응용프로그램에 대한 서명

-샌드박스 활용

안드로이드의 취약점

안드로이드는 iOS보다 훨씬 자유로운 운영체제로 사용자의 선택에 따라 보안수준을 선택할수 있다.


모바일 기기 보안의 문제점


이동성으로 인한 문제점

모바일 기기 보안의 가장 큰 문제는 모바일 기기의 이동성에 있다. 모바일 기기의 경우 공격받을 떄보다 공격에 사용될떄 문제의 소지가 더 큰데, 바로 모바일 기기의 높은 이동성 떄문이다.

블루투스의 취약점과 위협

블루투스는 여러 가지 장치들이 작은 규격과 적은 전력으로 접근하기 떄문에 높은수준의 암호화와 인증을 구현하기가 어려워 다양한 위험에 노출될수 있다.

<블루 프린팅>

블루프린팅은 블루투스 공격장치의 검색활동을 의미한다. 각 블루투스 장치는 MAC 주소와 유사하게 6바이트의 고유주소가 있다. 블루투스 장치는 장치간 종류를 식별하기 위해 서비스 발견 프로토콜 (SDP)을 보내고 받는다. 그리고 이 서비스 발견 프로토콜을 이용해 공격자는 공격이 가능한 블루투스 장치를 검색하고 모델을 확인할수 있다.

<블루 스나프)

블루투스의 취약점을 이용하여 장비의 임의 파일에 접근하는 공격이다. 공격자는 블루투스 장치끼리 인증없이 정보를 간편하게 교환하기 위해 개발된 OPP 기능을 사용하여 블루투스 장치로부터 주소록 또는 달력등의 내용을 요청해 이를열람하거나 취약한 장치의 파일에 접근 할수있다.

<블루 버그>

블루버그는 블루투스 장비간 취약한 연결 관리를 악용한 공격이다. 공격장치와 공격대상 장치를 여결하여 공격대상 장치에서 임의의 동작을 실행하는 공격이다.

'Study > Book' 카테고리의 다른 글

정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13

정보보안개론 0x05

Kail-KM
|2015. 1. 22. 01:39

Malicious Code (악성 코드)


악성코드 : "제작자가 의도저으로 사용자에게 피해를 주고자 만든 모든 악의적 목적을 가진 프로그램 및 매크로, 스크립트 등 컴퓨터상에서 작동하는 모든 실행 가능한 형태"


악성코드의 분류



  • 바이러스 

-사용자 컴퓨터 내에서 사용자 몰래 프로그램이나 실행 가능한 부분을 변형해 자신 또는 자신의 변형을 복사하는 프로그램, 가장 큰 특성은 복제와 감염.

- 인터넷 또는 네트워크를 통해서 컴퓨터에서 컴퓨터로 전파되는 악성 프로그램.

- 윈도우의 취약점 또는 응용 프로그램의 취약점을 이용하거나 이메일이나 공유 폴더를 통해 전파

- 바이러스와는 달리 스스로 전파되는 특성이 있다.

  • 트로이 목마

- 바이러스나 웜처럼 컴퓨터에 직접적인 피해는 주지 않지만, 악의적인 공격자가 컴퓨터에 침투하여 사용자의 컴퓨터를 조종할수 있는 프로그램

- 고의적으로 만들어졌다는 점에서 프로그래머의 실수인 버그와는 다르다.

-자기 자신을 다른 파일에 복사하지 않는 다는 점에서 컴퓨터 바이러스와 구별된다.

  • 인터넷 악성코드

- 인가되지 않은 사이트나 크랙사이트 등에 접속할떄 감염된다.

- 최근에는 웜의 형태로 전이 되고 있다.

  • 스파이웨어

- 자신이 설치된 시스템의 정보를 원격지의 특정한 서버에 주기적으로 보내는 프로그램

-사용자가 주로 방문하는 사이트, 검색어 등 취향으 파악하기 위한것도 있지만 패스워드 등과 같은 특정 정보  를 원격지에 보내는 스파이웨어도 존재한다.



바이러스


1세대 : 원시형 바이러스

단순하게 자기복제 기능과 데이터 파괴 기능만을 가지고 있으며 주로 부트 바이러스와 파일 바이러스로 나뉜다

<부트바이러스>

부팅 단계

1단계(POST) : POST 과정은 하드웨어 자체가 시스템에 문제가 없는지 기본사항을 스스로 체크하는 과정

2단계(CMOS) : 기본 부팅 매체로 BIOS는 CMOS에서 이런 기본 설정 사항을 읽어 시스템에 적용

3단계(운영체제 위치정보로드) : 윈도우 부트서브 시스템이 실행

부트 바이러스는 바로 3단계에서 동작하며 과거에는 부트바이러스에 감염된 디스크로 운영체제를 구동시키면 바이러스가 MBR과 함께 PC 메모리에 저장되고 부팅후에 사용되는 모든 프로그램에 자신을 감염시켰다.

<파일 바이러스>

부트바이러스와는 달리 하드 디스크가 PC에서 일반화 되면서 그 대안으로 나온것으로 일반적으로 COM, EXE와 같은 실행파일과 오버레이 파일, 디바이스 드라이버 등에 감염된다.


2세대 : 암호형 바이러스

1세대 바이러스는 지체에 특정한 패턴을 가지고 있어서 백신을 만드는 프로그래머는 특정 패턴으로 이를 진단하고 바이러스를 삭제하여 바이러스를 치료했다. 그리하여 이를 우회하기 위해 암호형 바이러스를 만들어 자체적으로 코드를 암호화하는 방법을 사용하기 시작했다.

하지만 바이러스가 동작할떄 메모리에 올라오는 과정에서 암호화가 풀리기 떄문에 백신 제작자들은 이를 이용하여 메모리에 실행되어 올라온 바이러스를 거꾸로 분석하여 감염파일과 바이러스를 분석하고 치료했다.


3세대 : 은폐형 바이러스

은폐형 바이러스는 예전에 플로피 디스크를 주로 쓰던 시절 일정기간동안의 잠복기를 갖는 바이러스를 뜻한다.


4세대 : 다형성 바이러스

바이러스 파일안의 특정한 식별자를 갖고 감염여부를 판단하는데 이떄 특정 식별자를 이용하여 진단하는 기능을 우회하기 위해 사용되는 바이러스가 다형성 바이러스이다.


5세대 : 매크로 바이러스

일반적으로 컴퓨터 바이러스는 실행파일을 이용해 감염되고 전파된다. 하지만 매크로 바이러스는 비주얼베이직스크립트로 많이 제작된다.

매크로 바이러스는 엑셀 또는 워드와 같은 문서파일의 매크로 기능을 이용하므로 이러한 파일을 열떄 감염된다.




웜 ( Worm )


웜은 인터넷 또는 네트워크를 통해서 컴퓨터에서 컴퓨터로 전파되는 프로그램을 의미한다. 웜은 다른 컴퓨터의 취약점을 이용하여 스스로 전파되거나 메일로 전파되지만, 다른 파일을 감염시키는 컴퓨터와는 상당히 다르다. 컴퓨터 바이러스는 부트영역에 침입하거나 메모리에 상주 또는 정상파일에 침입하여 감염시키지만 웜은 스스로를 증식하는 것이 목적이ㅏ. 그랴서 웜은 파일자체에 이런 기능이 있거나 운영체제에 자신을 감염시킨다.

  • MASS Mailer형 웜

MASS Mailer형 웜은 자기자신을 포함하는 대량 메일 발송을 통해 확산되는 웜이다. 

주요 증상은 다음과 같다

- 메일로 전파 된다. 감염된 시스템이 많으면 SMTP 서버(TCP 25번포트)의 네트워크 트래픽이 증가

- 베이글은 웜을 실행할떄 가짜 오류 메세지를 출력한다.

- 넷스카이는 윈도우 시스템 디렉터리 밑에 CSRSS.exe를 만든다.

- 변형된 종류에 따라 시스템에 임의의 파일을 생성한다.

- 확인되지 않은 메일을 열어 볼떄 확산된다.

  • 시스템 공격형 웜

시스템 공격형 웜은 운영체제 고유의 취약점을 이용해 내부 정보를 파괴하거나, 컴퓨터를 사용할수 없는 사태로 만들거나, 혹은 외부의 공격자가 시스템 내부에 접속할수 있도록 백도어를 설치하는 웜이다.

  • 네트워크 공격형 웜

네트워크 공격형 웜은 특정 네트워크나 시스템에 대해 Syn Flooding, Smurf와 같은 서비스 거부(DOS) 공격을 수행한다. 시스템 공격형 웜과 네트워크 공격형 웜은 BOF나 FS 와 같은 시스템의 취약점을 이용하여 확산되거나 공격하는 경우가 많고, 최근에는 시스템 공격과 네트워크 공격을 함꼐 수행하는 경우도 많이 발견되고 있다.


기타 악성코드


  • 백도어와 트로이목마

백도어의 원래 의미는 운영체제나 프로그램을 생성할떄 정상적인 인증과정을 거치지 않고, 운영체제나 프로그램 등에 접근할수 있도록 만든 일종의 통로이다. 다른 말로 Administrative  Hook이나 트랩도어라고도 한다.

트로이 목마는 백도어와 마찬가지로 운영체제의 원래 인증을 우회하여 원격에서 시스템 내부에 접근할수 있게 하지만 그 설치 과정이 관리자에 의한 것이 아닌 바이러스나 웜에 의한 것이고, 접근자가 관리자가 아닌 해커인 경우이다. 트로이 목마는 사용자가 의도하지 않은 코드를 정상적인 프로그램에 삽입한 형태를 취하고 있으며, 최근에는 배고어와 트로이 목마를 구분하지 않고 백도어라고 통칭하기도 한다.

  • 인터넷 악성코드

주로 인가되지 않은 사이트 등에 접속할떄 감염된다. 예전에는 악성코드로 끝나는 경우가 많았으나, 최근에는 웜의 형태로 전이 되기도 한다.

  • 스파이 웨어 ( Spyware)

트로이 목마와 비슷한 종류로써 자신이 설치된 시스템의 정보를 원격지의 특정한 서버에 주기적으로 보내는 프로그램이다.




악성코드 탐지 및 대응책


  • 네트워크 상태 점검하기

상당수의 백도어는 외부와의 통신을 위해 서비스 포트를 생성한다. 

하지만 최근의 악성코드는 번호만으로는 추측하기가 어렵기떄문에, 악성코드가 사용하는 포트를 netstat만으로 확인하기 어려운 경우에는 CPorts와 같은 프로그램을 사용하여 서비스포트별로 사용하는 응용프로그램을 확인할수 있다.

  • 정상적인 프로세스와 비교하기

윈도우와 유닉슷 시스템 등의 정상적인 프로세스를 외워두면 비정상적인 프로세스르 식별하는데 도움이 된다.

  • 백도어의 실질적인 파일확인하기

네트워크 상태와 프로세스 분석을 통해 확인한 백도어의 실질적인 파일을 확인한다. 악성코드 파일을 확인할 떄는 total commander와 같은 툴을 사용한다. 

  • 시작프로그램과 레지스트리 확인하기

윈도우 시스템은 시작프로그램등의 시스템 운영과 관련하여 리부팅되더라도 기본설정값이 변하지 않도록 레지스트리에 여러가지 값을 기록해둔다. 백도어 역시 이러한 레지스터를 이용하는 경우가 많기 떄문에 백도어를  삭제할떄에는 레지스터에서도 이러한 내용을 확인해야 한다.

  • 백도어 제거하기

위의 단계를 통해 배도어를 확인했다면 다음 절차를 따르면 된다

-해당 프로세스를 Kill process Tree로 중지시킨다

-해당 폴더에서 확인한 파일을 삭제한다

-시작 프로그램에서 확인한 사항을 삭제한다.

'Study > Book' 카테고리의 다른 글

정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12

정보보안개론 0x04

Kail-KM
|2015. 1. 21. 01:42

Code Security


시스템과 프로그램에 대한 이해


1. 시스템 메모리의 구조

  • 스택 영역과 힙 영역

어떤 프로그램을 동작시키면 메모리에 프로그램이 동작하기 위한 가상의 메모리 공간이 생성된다. 이떄 상위 메모리는 스택(Stack) 이라는 메모리 공간이 형성되고, 하위메모리에는 힙(Heap)이 생성된다.

스택 영역은 프로그램 로직이 동작하기 위한 인자(Argument)와 프로세스 상태를 저장하는데 사용되고, 힙 영역은 프로그램이 동작할떄 필요한 데이터 정보를 임시로 저장하는데 사용된다.

스택 영역은 레지스터의 임시 저장 장소, 서브루틴 사용시  복귀주소 저장, 서브루틴에 인자전달 등에 사용된다. 스택은 메모리의 상위주소에서 하위주소로 방향으로 사용하며 후입선출(LIFO) 원칙에 따른다.

힙 영역은 프로그램이 실행될 떄까지 알수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램의 프로세스가 사용할 수 있도록 미리 예약되어 있는 메인 메모리의 영역으로, 프로그램들에 의해 할당되었다가 회수되는 작용이 되풀이 된다. 힙의 기억 장소는 대개 포인터 변수를 통해 동적으로 할당받고 돌려준다.


  • 레지스터
CPU 연산과 어셈블리어의 동작을 이해하기 위해 CPU의 임시 메모리인 레지스터에 대해 살펴보자 주로 많이 사용되는 인텔의 80x86 CPU는 프로그램의 동작을 위해 다음과 같은 레지스터를 제공한다.


레지스터의 명칭은 ESP의 경우 16비트의 레지스터 SP에 E를 추가한 거시다. 프로세서가 32비트로 커지면서 Extended라는 의미를 표현하기 위해 E를 붙인 것일뿐 SP와 기본적인 역할은 동일하다.


2. 프로그램의 실행구조
---생략---

3. 셸 (Shell)
셸은 운영체제를 둘러싸고 있으면서 입력받는 명령어를 실행시키는 명령어 해석기를 말한다. 셸의 종류는 크게 본셸, 콘셸,C셸로 나누어진다.

셸의 역할은 다음과 같다.
-자체의 내장 명령어 제공
-입력/출력/오류의 리다이렉션 기능 제공
-wildcard 기능 제공
-파이프라인 기능 제공
-조건부/ 무조건부 명령열(Sequences) 작성 기능 제공
-서브셸 생성 기능 제공
-후면처리 (Background Processing) 기능
-셸 스크립트(Shell Script, 프로그램) 자것ㅇ 가능

4. 프로세스 권한과 SetUID

SetUID는 유닉스 시스템을 해킹하는데 매우 중요한 요소로 SetUID 파일은 누가 실행하든지 관계없이 해당 파일이 실행될떄 파일 소유자의 권한을 갖는다는 특징이 있다.


Buffer Over Flow Attack


BOF의 개념은 C 언어의 데이터 무결성 문제로 알려졌으며, 초기에는 프로그램상의 문제로 인식되었으나 현재에는 다양한 BOF 공격 등으로 인하여 문제의 심각성이 인식되기 시작했다.

1. BOF 공격의 개념

BOF의 가장 기본적인 개념은 데이터의 형태와 길이에 대한 불명확한 정의로 인한 문제점 중에서 '길이에 대한 불명확한 정의'를 악용한 덮어쓰기로 인해 발생한다. 즉 정상적인 경우에는 사용되지 않아야 할 주소 공간, 원래는 경계선 관리가 적절하게 수행되어 덮어쓸 수 없는 부분에 해커가 임의의 코드를 덮어 쓰는 것을 의미한다.

불명확한 경계에 대한 문제는 여러가지 상황에서 다양한 형태로 일어나며 코드보안에서도 마찬가지이다. BOF에 취약한 함수와 그렇지 않은 함수가 있는데, 프로그래머가 취약한 특정 함수를 사용해야 공격이 가능하다. 그러므로 취약한 함수를 사용하지 않는 프로그래머만 있으면 BOF 공격이 훨씬 어려워 워 진다.

2. BOF 공격의 원리

bugfile.c

------------------------

int main(int argc,char *argv[])

{

char buffer[10];

strcpy(buffer,argv[1]);

printf("%s\n",&buffer);

}

------------------------

page. 265


3. BOF 공격에 대한 대응책

BOF 공격에 안전한 프로그램을 만드는 방법은 BOF에 취약한 함수를 사용하지 않거나 최신 운영체제를 사용하는 방법 등이 있다.


-BOF에 취약한 함수를 사용하지 않는다.

strcpy(char *dest, const char *src);

strcat(char *dest, const char *src);

getwd(char *buf);

gets(char *s);

fscanf(FILE *stream, const char *format,...);

scanf(const char *format,...);

realpath(char *path, char resolved_path[]);

sprintf(char *str. const char *format);

-최신 운영체제를 사용한다.

운영체제는 발전하면서 Non-Executable Stack, Stack Guard, Stack Shield 와 같이 운영체제 내에서 해커의 공격 코드가 실행되지 않도록 하는 여러 가지 장치가 있다.



Format String Attack


1. FS 공격의 개념

FS 공격은 데이터의 형태와 길이에 대한 불명확한 정의로 인한 문제점 중 '데이터 형태에 대한 불명확한 정의'로 인한 것이다. FS 라는 용어 자체는 낯설지 모르겠지만, C 프로그래밍을 배웠다면 이미 여러번 사용해본 공격이다.


Format String과 이것을 사용하는 printf()함수의 취약점을 이용하여 RET의 위치에 쉘코드의 주소를 write 하여 쉘을 획득 하는 공격.


Bufer Overflow Atack과 비교

ü RET의 위치 주소를 정확히 알아야 함 (BOF는 bufer와 RET사이의 거리만알면 됨)

ü Overflow 없이 RET에 바로 write할 수 있으므로 스택 가드나 canary를 우회 함


2. FS 공격의 원리

취약한 포맷 스트링

FS 공격은 포맷 스트링인 %s의 값을 바꾸는 것이다. 즉 명확하게 정의 되었던 데이터 형태를 불명확하게 바꾸는 것이다.


printf()는 format string이후에 해당 format string에 해당하는 인자가 없으면 Stack상에서 printf()가 호출된 시점에서 stack top위치의 내용부터 순서대로 인자로 여김


main()

{

char *buffer = "wishfree\n%x\n";

printf(buffer);

}

실헹시 wishfree 문자열 이외에 wishfree 문자열이 저장된 다음의 메모리에 존재하는 값또한 출력한다.


-별도 공부 필요


'Study > Book' 카테고리의 다른 글

정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12
정보보안개론 0x01  (2) 2015.01.11

0114_example.exe

Kail-KM
|2015. 1. 16. 03:29

0x01 기본분석


<Exeinfo PE>

패킹이 되어있지않으며 별다른 이상은 없는것 같습니다.

<실행시>

앞부분에서 =====안녕하세요===라는 멘트가 나오며 그 후 두개의 숫자를 입력하라고 화면에 출력이 된다. 그후 입력함수를 통하여 입력을 받습니다.

입력을 받은 두 숫자를 한번 출력을 한후 사칙연산을 선택하라 합니다. 사칙연산을 선택하면 앞의 입력받았던 두 숫자의 연산 결과를 출력하여 나타내주며 프로그램은 종료됩니다.

시작 > 멘트 > 숫자 2개 입력 > 연산선택 > 결과 출력 > 종료


0x02 분석


<변수의 선언>

EBP를 기준으로 EBP-8, -14 -20 으로 3개의 4BYTE에 0으로 초기화하는 것을 알수가 있습니다.

따라서 int a=0,b=0,c=0;으로 변수를 선언하고 있습니다.


<기본 문자열 출력>

0x01 분석에서 보았던 것처럼 시작과 함께 출력될 멘트를 호출 하는 CALL 함수들이 존재하고 있으며 가장 밑에는 두개의 숫자입력을 요구하는 문자열 또한 출력을 하고 있습니다.

여기서 또한 고려해보아야 할점은 문자열을  출력하고 다음 문자열을 출력하기 전마다 항상 ADD ESP,4가 존재하고 있다는 것을 볼 수 있어야 합니다.(나중에 더 자세히 보기로..:)


<두개의 숫자를 입력>

CALL 0087382F를 호출하면 프로그램 화면에는 숫자의 입력을 기다리게 됩니다. 그 후 입력을 받고 난후에는 EAX에 저장된 b를 먼저 스택에 쌓고 그후에 ECX에 저장된 a의 값을 으로 보내는것을 확인할 수가 있는데 이는 스택의 특성상 printf함수를 통하여 먼저 스택에서 다시 나와야하는 것은 a이기에 a를 마지막에 넣는 것이며 b는 나중에 불리기에 미리 스택에 쌓아놓는 것입니다.


<사칙연산의 선택>

%d 형태의 숫자를 입력 받을려 하는 것을 확인할수가 있습니다. 입력을 받은후 그 값은 c의 주소값에 저장이 되어있으며, 붉은 부분을 보는 것과 같이 SUB ECX,1 로 인하여 1을 감소시키고 있는 것을 확인 할수 있습니다.


<비교문을 통하여 출력>

맨 윗줄에서 입력받은 값 c-1 /*SUB ECX,1*/의 값이 3보다 클 경우에는 바로 밑의 점프문을 통하여 종료문으로 보내는 구조를 가지고 있습니다. 그 후 만약 그 값이 3보다 크지 않은 경우에는 붉은 부분의 점프문을 이용하게 되는데  C언어의 IF문을 사용한 것이라 예상합니다.


곱셈의 경우 쉽게 파악을 할 수 있으며 나눗셈의 경우 INT형으로 선언을 하였기에 CVTPI2PS를 통하여 Double 자료형으로 만들어 주어야합니다. 그렇게 (double)a,(double)b를 DIVPS XMM0,XMM1을 통하여 나누어 주며 그 결과는 밑에 CALL명령어의 호출을 통하여 출력이 됩니다.



0x03 C언어로 복원




0x04 복원한 프로그램의 실행



'Study > CodePA' 카테고리의 다른 글

15.01.14-0x02 XORandShift.exe  (0) 2015.01.16
15.01.14-0x01  (0) 2015.01.14

0x01 파일을 실행했을 때의 결과



0x02 OllyDbg를 통한 접근


a = ff00 으로 1111 1111 1111 1111 0000 0000 0000 0000
b = 00ff 이니 0000 0000 0000 0000 1111 1111 1111 1111 입니다.
이를 XOR  >> 1111 1111 1111 1111 1111 1111 1111 1111 

이를 Shift Left 16 으로 인하여 1111 1111 1111 1111 0000 0000 0000 0000 이 됩니다.


0x03 복원





XORandShift.exe


'Study > CodePA' 카테고리의 다른 글

0114_example.exe  (0) 2015.01.16
15.01.14-0x01  (0) 2015.01.14

0x01 IP가 출력되는 스트릥 "%d.%d.%d.%d"



0x02 Capture라는 스트링이 매우 수상히 느껴짐



0x03 Sever와 Client와 관련된 스트링.


tclientwinsocket WebSocket 서비스에 연결하기 위해 클라이언트를 제공 합니다.

tserverclientwinsocket 개별 클라이언트 소켓에 소켓 연결에 대한 Windows 소켓 API 호출을 관리하는 서버 소켓 구성 요소에 사용


0x04 모니터와 관련된 스트링


monitorfromwindow : 지정된 윈도우의 경계 사각형 만나는 가장 큰 면적을 갖는 표시 모니터에 핸들을 검색한다.

monitorfrompoint : 지정된 점을 포함한 디스플레이 모니터에 대한 핸들을 검색

getmonitorinfo : retrieves information about a display monitor.

display


0x05 마우스와 관련된 스트링


0xxx SnapShot 관련


0x06 SVCHOST.exe과 관련된 스트링



0x07 TScreen


TScreen 단독 어플리케이션이 실행되는 화면의 상태를 나타낸다.


0x08 GetCapture 함수의 호출


마우스를 캡처 한 윈도우에 대한 핸들 (있는 경우)를 검색 : 감염PC에 공격자가 마우스를 통해 조종을 하는것을 뜻하는것이라 예상.


0x09 InternetOpen & URLDownloadToFile


인터넷open 과 관련된 함수를호출하는 명령어

URLDownloadToFile : 함수의 이름 그대로 매우 수상함.


'Reversing > Malware Analysis' 카테고리의 다른 글

Nethost.exe분석  (1) 2015.11.26
server.exe 분석  (0) 2015.10.05
Morris Worm Source Code  (0) 2015.02.17
Rejoice와 서버파일 분석(초기,동적)  (0) 2015.01.15
악성코드 'Lucci.exe' 소스코드 C++  (0) 2015.01.11

0x01 압축의 구성요소

0x02 VirusTotal을 통한 정보확인




0x03 Exeinfo PE 를 통한 분석


위의 정보를 통하여 두 파일은 패킹이 되지 않은것을 확인할수가 있다.


0x04 Rejoice.exe의 기능


두번째 버튼의 기능

-두번째 버튼을 누르면 Generate.exe 이 출력되는 것을 확인 할수가 있다.

-가장 위의 darkbyte16.ddns.net 에 서버파일을 관리할 PC의 IP를 입력하면되며 뒤의 8010은 그에 사용될 포트 번호이다.


아래의 동그라미친 부분의 버튼을 누르면 괄호표시를 한곳의 정보가 변경이 된다. 예상하자면 하나의 이름으로 유통되는 것보다 이름이 변경이 되는 것이 공격자의 입장에서는 유용하기떄문이다.



표시한 부분을 클릭하면 자신의 IP를 알수가 있다.

아래의 동그라미 친 부분을 클릭하면 서버파일을 어느 곳에 저장할지 확인하는 화면이 나타난다.



0x05 세번째 기능


0x06 감염PC 화면 보기


0x07 캠기능


0x08 사운드 기능-감염PC의 마이크를 통한 소리를 들을수가 있다.



0x09 감염PC의 정보확인





0x0A 감염PC에 콘솔을 통한 명령(CMD)



0x0B 서버파일 실행전 프로세스



0x0C 서버파일 실행 후-0244677A.exe 파일이 프로세스 목록에 추가된것을 확인할수가있다.



0x0D 시작프로그램 목록

자동으로 시작프로그램의 목록에 추가된것을 확인할수가있다.




'Reversing > Malware Analysis' 카테고리의 다른 글

Nethost.exe분석  (1) 2015.11.26
server.exe 분석  (0) 2015.10.05
Morris Worm Source Code  (0) 2015.02.17
Rejoice와 서버파일 분석(정적)  (0) 2015.01.15
악성코드 'Lucci.exe' 소스코드 C++  (0) 2015.01.11

15.01.14-0x01

Kail-KM
|2015. 1. 14. 02:25
#C프로그래밍 어셈블리로부터 복구


1. IDIV는 나눗셈을 하는 명령어인데 왜 인자가 하나 뿐인가?
2.CVTPI2PS 는 무엇인가 대체
3.스택에는 어떻게 쌓일까   라는 의문들을 가지게 되었습니다.



1.IDIB는 EAX와 연산을 한다고 Hex님이 이야기를 해주시니 앞뒤가 딱 맞는것 같습니다.
EAX와 연산을 한 후 EAX로 반환한다.

2.여기서 개인적으로 중요하다싶은게 CVTPI2PS 입니다. 
Convert two 32-bit signed integers from MM/Mem to two SP/FP.  라고 구글링 결과 알게 되었는데
생각을 해보니 정수를 저장할때는 그 공간에 그대로 채워 넣으면 되지만 실수를 저장할때는 그 공간을 나누어
소수점윗부분과 아래부분으로 나누어 저장한다는 것이 기억 났습니다.

아래의 두사진을 보면 한곳에는 소수점 윗부분이, 다른 한곳에는 소수점아래부분이 저장된것을 확인가능.






그후 MOVUPS라는 명령에 대하여 알아보았는데

"MOVUPS xmm1, xmm2/m128 는 Move packed single-precision floating-point values from xmm2/m128 to xmm1." 라는 말을 보아 뒤의 인자로부터 앞의 인자로 이동시킨다.
그렇다면 CVTPI2PS로 부터 나누어졋던 두 부분을 다시 합치는 것이라 예상을 하였습니다.





3.아직 스택에 대하여는 잘 모르지만 e가 먼저 스택에 쌓인 이유는 printf 함수에서 %c를 통해 e를 출력하는것이 다른 것보다 후에 일어나기에 e를 가장먼저 스택에 쌓고 그후는 %d에 해당하는 d를 스택에 넣는다. 그리고 가장 먼저 출력될 %lf에 해당하는 c를 나중에 스택에 넣는다고 생각된다.





따라서 >

warming_up.exe


'Study > CodePA' 카테고리의 다른 글

0114_example.exe  (0) 2015.01.16
15.01.14-0x02 XORandShift.exe  (0) 2015.01.16