14.04.28 21:10

2014. 4. 28. 21:17

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Day-02 어셈블리어

i2sec/Reverse Engineering 2014. 4. 28. 19:56

1.데이터 형식

메모리에 접근 했을때 얼만큼 읽어들일지 결정

데이터 타입

사용 용도 

 BYTE

부호 없는 1 byte  

 WORD

부호 없는 2 byte 

DWORD 

부호 없는 4 byte 


2. 어셈블리언어 명령어

플랫폼에 따라서 다르다(IA32 : intel 기반, AT&T : linux 기반)

ADD      [EBP-0x04],0x01

     └> 명령어(OPCODE)   └>피연산자(OPERAND)

1.명령어(OPCODE)

사용할 명령어가 들어가는 부분


2.피연산자(OPERAND)

operand의 갯수는 opcode에 따라 정해져 있다.(','로 구분)

<[EBP-0x04]>

메인 함수도 함수이기 때문에 호출 시 스텍프레임 생성

32bit 레지스터 이기때문에 자료형에 상관없이 4씩 변화

<0x01> : 상수

10진수로 표현가능하나 어셈블리어로 열면 16진수로 표시되어 있기 때문에 혼동이 될수도 있다.


<operand 표시법>

표시 기법 

설명

mem 

메모리 

label 

지정된 레이블 

imm

즉시 값, 상수 

reg 

범용 레지스터 

*레이블은 소스코드 중간에 이름을 지정하는것으로 뛰어넘을때나 반복할때 사용된다.

-뛰어넘기

int main(void)

{

int a = 0;

goto L1;

a = 5;

L1:

printf("%d\n", a);

return 0;

}

이렇게 되면 a=5;는 뛰어넘고 바로 printf로 가게 되어 0이 출력된다.


-반복하기

int main(void)

{

int a = 0;

L1:

a = 5;

printf("%d\n", a);

goto L1;

return 0;

}

이렇게되면 a=5; 와 printf가 계속 반복해서 실행되어 5가 무한번 출력된다.


3.INC

opernad의 값을 1증가시켜주는 명령어(operand 1개)

"++"연산자와 동일

결과 : a = 2

<사용가능한 operand>

INC reg (ex>INC EAX) 

INC mem(ex>INC [EBP-0x04]) 


*인라인 어셈

-상위레벨 언어에서 어셈블리어를 사용할 수 있게 해준다.

-문법상 오류가 발생해도 오류를 잘 표시 안된다

-한줄에는 한 명령어만!

-opcode 대/소문자 구분하지 않는다

-변수 a 대신에 [EBP-0x04]로 표현가능하다(피연산자 부분 참조)

-"_asm"영역 안에서는 기존 c언어의 함수를 사용할수없다(printf등)


4.DEC

operand의 값을 1감소시켜주는 명령어(operand 1개)

"--"연산자와 동일

결과 : a = 0

<사용가능한 operand>

DEC reg (ex>DEC EAX) 

DEC mem(ex>DEC [EBP-0x04]) 


5.ADD

첫번째 operand의 값과 두번째 operand의 값을 더해서 첫번째 operand에 저장(operand 2개)

"+="과 동일

결과 : a = 20, b= 10 (동일한 결과지만 형태가 다른것을 보기위해서 저렇게 표현함)

<사용가능한 operand>

ADD reg, reg(ex>ADD EAX,EBX) 

ADD mem,reg(ex>ADD [EBP-0x04], EAX) 

ADD reg, mem(ex>ADD EBX, [EBP-0x04])

ADD reg, imm(ex>ADD EAX, 0x04) 

ADD mem, imm(ex>ADD [EBP-0x04], 0x01) 

 


6.SUB

첫번째 operand의 값과 두번째 operand의 값을 빼서 첫번째 operand에 저장(operand 2개)

"-="과 동일

결과 : a = -15, b = -2

*주석처리한결과가 다른 이유(주의!!!)

[EBP-0x08]은 b의 주소값이다. 그런데 b는 현재 0으로 초기화되있다. 

이 경우 0에서 -2를 하는 것이아니라 메모리공간의 끝인 256에서 -2가 되기때문에 254가 출력된다.


*그렇다면 a는 왜 그렇게 되지 않을까?

a는 현재 5라고 초기화되어 있고 바로 앞에서 이미 계산이 되고 있기 때문에 이어서 계산이 진행된다.


<사용가능한 operand>

SUB reg, reg(ex>SUB EAX,EBX) 

SUB mem,reg(ex>SUB [EBP-0x04], EAX) 

SUB reg, mem(ex>SUB EBX, [EBP-0x04])

SUB reg, imm(ex>SUB EAX, 0x04) 

SUB mem, imm(ex>SUB [EBP-0x04], 0x01) 

 


7.MOV

첫번째 operand에 두번째 operand의 값을 복사(대입) 한다(operand 2개)

변수 초기화와 동일

결과 : a = 16

<사용가능한 operand>

MOV reg, reg(ex>MOV EAX,EBX) 

MOV mem,reg(ex>MOV [EBP-0x04], EAX) 

MOV reg, mem(ex>MOV EBX, [EBP-0x04])

MOV reg, imm(ex>MOV EAX, 0x04) 

MOV mem, imm(ex>MOV [EBP-0x04], 0x01) 

 


*operand가  mem,mem 은 실행되지 않는다

<해결법> : mem의 값을 reg에 저장 후 사용


레지스터는 저장공간이기 때문에 어떠한 레지스터를 사용하던 상관없다.


<예제 1>

a=16;   b=5;    b++;  c=a+b; d=a-b; 를 어셈블리어로 표현하라.

결과 : a=16, b=6 c=22, d=10


<예제 2>

a=3;      b=5;      c=10;       b++;        c--;       a=b+c;      b=a-c; 를 어셈블리어로 표현하라.

결과 : a=15, b=6, c=9

'i2sec > Reverse Engineering' 카테고리의 다른 글

DAY 1 - 어셈블리언어  (0) 2014.04.25

백도어 탐지

i2sec/System hacking 2014. 4. 27. 21:43

1. Linux 프로세스 확인 및 열린 포트 확인

<ps -ef> : 프로세스 확인


<netstat -an> : 열린포트 확인


2. Windows 프로세스 확인 및 열린 포트 확인

윈도우 프로세스를 확인하기 위해서는 sysinternals suite 검색 후 다운로드가 필요하다.

다운로드 후 앞축을 풀면 파일이 여러게 있는데 그중에 우리가 볼것은!!!!

<pslist> - 윈도우 프로세스 확인을 위한 툴이다. 이툴은 CMD창에서 경로를 찾아가서 실행 시켜줘야한다.


<process explorer> - pslist보다 프로세스를 자세히 보는 프로그램

  -분홍색=시스템프로세스, 보라색=내가 실행한 프로세스, 악성코드 감염시 빨간색 표시



<netstat -an> - 열린 포트를 확인해주는 명령어(따로 툴이 필요하지는 않다)


<TCPview> - 열린 포트를 실시간으로 확인  netstat와 유사하나 netstat는 정적 tcpview 동적


<https://www.virustotal.com/ko/> - 내가 가지고 있는 파일이 악성코드나 바이러스에 감염되어 있는지 확인해주는 사이트다.




3.바이러스 탐지 기법

1.파일 이름

(잘 사용안함-판별하기 힘듬)


2.해쉬

  ->해쉬값 비교을 비교해 변조 여부를 확인 하는 기법

  ->우회하기 쉬움

  ->www.virustotal.com - 해시값을 이용해 악성코드인지 판별해주는 사이트


3.시그니처

->기계어로 변환된 16진수 코드를 보고 진단하여 악성코드로 진단한다.

이미발견되고 정립 되어진 공격 패턴을 미리 입력해 두고, 입력된 패턴에 해당하는 트래픽을 발견하게 되었을 때 이를 감지하여 알려주는 기법이다.

이 기법은 모니터링 한 트래픽이 알려진 악성 행위의 특징과 일치하면 이를 공격으로 탐지하여 알려주는 것이므로, 많이 알려지고 공격자가 자주 사용하는 공격, 혹은 위협적이라고 알려진 공격 들을 전부 탐지 할 수 있다는 장점이 있다. 

하지만 알려지지 않거나 입력되어 있지 않은 새로운 패턴에 대해서는 탐지 할 수 없다는 단점이 있다.

이 기법은 해커의 공격 목표로 만들어진 트래픽 이라는 것을 가정해 이에 따른 2가지 특징을 전제로 한다.

첫번째는 공격자는 강력한 공격을 위해 가능한 많은 트래픽을 보낼려고 하기 때문에 공격 트래픽은 TCP 흐름제와와 같은 트래픽 제어 프로토콜을 준수하지 않으며 공격 목표는 모든 패킷에 응답할 수 없게 되고 공격자와 공격 목표사이에는 트래픽 흐름이 불균형해진다.

두번째는 공격 트래픽은 무작위 패턴으로 만들어진다.


4.OPCODE

  ->기계어 오른쪽의 어셈블리어 부분이용 특정부분에서 특정값(실제값) 컴파일전 소스상에서 고쳐야 한다.

  ->어셈블리어 명령어(opcode)를 보고 악성코드인지를 확인하는 기법


5.행동기반

  ->동작되는 것을 보고 확인(소스 필요)

  ->실제동작 및 실행하는 것을 보고 판별


4.백도어 탐색시 유용한 명령어

<불필요한 SETUID 권한 설정 확인>
find / -user root -perm -4000 -print 2>/dev/null         //권한이 4000번 이상인 파일 검색

<악성코드 및 소스코드 무결성 검증>
find / -name '*.php' -exec grep -PHn 'passthru|@eval|$pass = 'ec38fe2a8497e0a8d6d349b3533038cb';' {}\;

계정 점검
-서버 계정 목록
cat /etc/passwd
-서버 계정 접속 목록
lastlog

프로세스 확인
ps -ef | more

Process 변조 점검
lsof | more

네트워크 송/수신 트래픽 점검
netstat -antp | more

네트워크 송수신 트래픽 점검
strace -e trace=open ps > /tmp/strace.txt

기타 해킹 관련 파일 점검
find / -ctime 10 -print -xdev > ctime.txt
cat ctime.txt | more

history // 일단 어떤 명령어들이 쳐졌는데 확인(보통은 다지우고 나간다)

find / -atime 1  // atime >> 1시간 이내에 만들어진 것들 찾기

 find / -type f -ctime -1 -perm +4000 // ctime >> 24시간 이내에 4000번대 이상권한으로
 생성된 파일 찾기


'i2sec > System hacking' 카테고리의 다른 글

백도어(Backdoor)  (0) 2014.04.27
SetUID  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

백도어(Backdoor)

i2sec/System hacking 2014. 4. 27. 16:50

1.Backdoor란?

원래는 서비스 기술자나 유지보수 프로그래머들의 다른 PC에 대한 액세스 편의를 위해 시스템 설계자가 고의적으로 만들어 놓은 것이다. 최근에는 해킹에 취약한 부분을 일컫는 용어로 쓰이고 있다.


2.Backdoor 사용 이유

관리자는 편의성을 위해

해커는 침투 후 제침입을 위해 사용된다.


3.Backdoor 종류

로컬 백도어 : 서버의 셀을 얻어낸 뒤에 관리로 권한 상승을 할 때 사용하는 백도어로 트랩도어도 로컬 백도어라고 볼수있다.

시스템에 로그인한 뒤에 관리자로 권한 상승시키기 위한 것으로 공격자는 일반계정이 하나 필요하다.


원격 백도어 : 원격에서 관리자로 계정과 패스워드를 입력한 것처럼 바로 시스템 관리자 계정을 할 수 있는 백도어

네트워크에 자신의 포트를 항상 열어 놓는 경우가 많다. 일종의 서비스를 제공하는 데몬처럼 동작하는 것


원격 GUI 백도어 : 크기가 크고, 많은 데이터를 전송해야 되므로 노출되기 쉽기 때문에 실제로 많이 사용하지 않는 백도어다


패스워드 크래킹 백도어 : 인증회피가 아니라 인증에 필요한 패스워드를 원격지의 공격자에게 보내주는 역할을 하는 백도어

    사용자가 누르는 키보드의 정보를 원격지에 보내는 경우가 있고

    특정 문자열 즉'passwd'와 같은 문자열 뒤에 누를는 키보드의 정보를 보내는 경우


시스템 설정 변경 : 원격지의 쉘을 얻어낸다기 보다는 해커가 원하는대로 시스템의 설정을 변경하기 위한 백도어

 유닉스에서 프로그램 스케줄러로 사용되는 cron데몬을 이용하는 경우가 많다.


트로이 목마형 : 처음부터 백도어를 목적으로 만들어진 프로그램이 아닌데 백도어로 동작하는 경우

   윈도우에서는 웹 브라우저나 명령창 간단한 게임등도 백도어와 섞을 수 있다.

   이렇게 만들어진 백도어를 실행하면 원래 목적의 프로그램도 실행도과 동시에 백도어도 설치된다.


거짓 업그레이드 : MS사의 IE 웹브라우저를 무료로 업그레이드하라는 내용의 스팸 메일을 통해 사용자에게 프로그램 설치를                            유도하고 이 프로그램이 설치후 실행되면 몇몇 시스템 파일에 대한 수정과 다른 원격 시스템으로의                                  접속을 시도하는 행위를한다


그 외  : 네트워크 데몬이나 시스템 유틸리티를 수정한 백도어

     TCP/IP 프로토콜을 이용한 Shell binding 백도어

     kernel 모듈을 수정한 백도어

     방화벽을 우회하는 백도어

5.Backdoor 생성 및 숨기기

<소스코드>


<컴파일>

*컴파일 명령어는 만들어질 실행파일 명을 먼저 적고 컴파일할 파일 이름을 적는다.

(컴파일이 잘됬는지 확인하는 센스!)


<setUID 설정>



<유저아이디 접속후 백도어 실행>

*일반 계정으로 로그인 후 backdoor 파일을 실행 했을시 권한이 상승된 것을 볼수 있다.


<숨기기>

백도어 파일을 생성하고 잘 동작하는 것을 확인 했다면 이제는 관리자한테 들키지 않게 잘 숨겨둬야한다.

방법 중 하나는 기존의 SetUID가 걸려있는 파일을 바꿔치기하거나 변조하는 방법이다.

find / -perm -4000 명령어로 setuid가 걸려있는 파일을 찾는다.


이중에서 마음에 드는 파일과 바꿔치기하기!



*백도어를 이용하면 일반 사용자가 쉽게 관리자 권한을 가져올 수 있다.

 그러나 백도어를 생성하고 setuid를 설정하기 위해서는 관리자 권한이 필요하다는 치명적 단점도 존재한다.

그래서 보통 해킹을 끝내고 제접속을 위해 마지막에 백도어를 숨기고 나온다.

백도어는 간편하면서도 가장 무서운 양날의 칼 같은 존재인 것 같다.

보안관리자가 가장 중요시 점검해야되는 부분인 것 같다.




windows Backdoor 프로그램에는 netbus란게 있다.

클라이언트쪽에서 patch파일을 실행하면 포트가 열리면서 내가 접속할 수 있게되는 프로그램인데

상대방 PC의 행동 제어 및 화면 훔쳐보기가 가능하다.

툴시연은 올리지 않곘다.

'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
SetUID  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

SetUID

i2sec/System hacking 2014. 4. 27. 16:45

1.SetUID란?

- 프로그램 소유주의 권한으로 프로그램을 실행하는 것을 말한다.

- 이는 리눅스에서 매우 중요한 부분이며 해킹 중 90%이상 차지하는 방법이다. 

  잘쓰면 가장 유용하지만 잘못관리하게 되면 가장 취약한 점이 될수있는 위험한 부분이다


2.SetUID 설정

<일반 권한>


(1) 파일형식 : 파일 형식을 나타내는 부분 => -:파일, d:디렉토리, l:링크파일

(2) 소유자 권한 

(3) 그룹 권한

(4) 나머지 사용자 권한


* r은 읽기 권한을 의미 == 4

 w는 쓰기 권한을 의미 == 2

 x는 실행 권한을 의미 == 1

ex> .bashrc의 권한을 해석해보면 소유자는 읽고 쓰기가 가능하고 그룹 사용자는 읽기만 가능 그외 사용자들은 읽기만 가능

      이권한을 숫자로 표현하게되면 r+w =6, r =4, r=4   ==> 644가 된다.


<SetUID 권한>

파일을 하나 생성 후 chmod 명령어로 실행권한을 4644로 변경하였다.

(setUID = 4000, SetGID = 2000, Sticky bit= 1000)

나머지 권한은 644랑 같은 것 같은데 바뀐부분이 2가지 있다.


첫번째는 쇼유자의 x자리가 s로 바뀌었다.

setUID가 설정되게되면 소유자 권한의 x부분이 s로 바뀌게 되고

SetGID가 설정되면 그룹 권한의 x부분이 s로 바뀌게 되고

Sticky bit가 설정되게 되면 나머지 사용자권한의 x부분이 t로 바뀌게 된다.

(실행권한이 안들어가 있으면 대문자로 표현되고 실행권한이 있으면 소문자로 표현된다) 


두번째는 파일이름이 붉은 블럭형태로 변경된 것을 볼 수있다.

권한을 보지 않고도 파일 이름의 형태로만으로 유추가 가능하다.


ex> 7777권한을 표시 --> -rwsrwsrwt


3.Passwd 실행 원리(Setuid 비트)



R : 계정관리

RUID : Real UID 실제 계정이 누구인가?

RGID : Real GID 실제 그룹이 누구인가?


E : 프로세스 권한확인

EUID : Effective UID 어떤 유저권한으로 프로세스를 실행하고있는가?

EGID : Effective GID 어떤 그룹권한으로 프로세스를 실행하고있는가?


* ruid는 계정 자체의 권한을 말하고, euid는 프로세스 실행시의 권한을 의미한다.

예를 들어 setuid를 이용하여 일시적으로 권한을 0(루트)으로 변경했다고 하자.

이경우 euid 가 0번 권한을 가지고, ruid는 여전히 500 권한이다. 프로세스가 실행시에만 루트 권한을 획득한다는 의미이다.  프로세스를 다시 종료 시키면, 500 권한으로 돌아온다.

여기서 setuid가 일시적으로 소유자의 권한을 부여한다는것을 알수가 있다.




'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

Unix & Windows 인증 구조

i2sec/System hacking 2014. 4. 27. 15:30

1.unix 인증구조


1)Passwd 파일 구조

root : x : 0 : 0 : root : /root : /bin/bash

(1)   (2) (3) (4)  (5)    (6)      (7)


(1) Login name : 사용자 계정 의미

(2) Password : 사용자 암호가 들어갈 자리이나 /etc/shadow 파일에 저장

(3) User ID : 사용자 ID 즉, UID를 의미하고 root의 경우 0이 된다

(4) User Group ID : 사용자가 속한 그룹 ID 즉, GID를 의미하고 root 그룹의 경우 0이 된다

(5) Comment : 사용자으 ㅣ코멘트 정보를 적는 곳

(6) Home Directory : 사용자의 홈 디렉토리를 지정하는 곳

(7) Shell : 사용자가 기본으로 사용할 쉘 종류 지정


2)Shadow 파일 구조

root:$1$T/4NE$Gs/5lTpDNNAAPkN9iBdU11:16157:0:99999:7:  :   :

(1) (2)      (3) (4) (5) (6)(7)(8) (9)


(1) Login name : 사용자 계정

(2) Encrypted : 패스워드를 암호화시킨 값

  *'$' 구분자 역할을 하며 3부분으로 나뉜다.

   '1' : 암호화 방식을 나타내는 부분으로 1은 MD5를 의미한다.

   '$T/4NE' : Salt값으로 패스워드와 조합하여 해시값을 생성할 때 사용된다.

   'Gs/5lTpDNNAAPkN9iBdU11' : 해시값. 실제 비밀번호가 암호화된 부분이다.


(3) Last Changed : 1970년 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산

(4) Minimum : 패스워드가 변경되기 전 최소사용기간(일수)

(5) Maximum : 패스워드 변경 전 최대 사용기간(일수)

(6) Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수

(7) Inactive : 로그인 접속 차단 일 수

(8) Expire : 로그인 사용을 금지하는 일수 (월/일/연도)

(9) Reserved : 사용하지 않음


*(3)~(9)은 거의 볼 일 없다 중요한 것은 (2)!!!


*해시값 만들기

 [root@localhost ~]# openssl passwd -1 -salt T/4NE(salt 값 입력)

 Password:                                        (원하는 패스워드 입력)

 $1$T/4NE$pT/ALNPWEcNks/yfrCKkC0                  (패스워드 + salt 값을 통해 생성된 해시값)



3)암호화 : 특정키를 이용해서 평문을 암호문으로 변경하는 것을 말한다. 치환기법

         암호문을 보고 평문을 찾아낼수있다.


4)해시 : 데이터를 자르고 치환하거나 위치를 바꾸는 등의 방법을 사용해 결과를 만들어낸 값을 해시값이라 한다.  

       확률이 낮으나 해시값이 언제든지 똑같이 나올수 있음.

       해시값은 복호화가 불가능하다.


5)존더리퍼(J.T.R)

Unix나 Linux의 패스워드를 검사하여 취약한 패스워드를 보여주는 툴이다.

Linux 패스워드 진단용으로 많이 사용되고 있다.

-------------------사용방법----------------------

john the ripper (존더리퍼) - password cracking tool

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

wget http://www.openwall.com/john/g/john-1.7.8.tar.gz(다운로드)

tar zxvf john-1.7.8.tar.gz(압출풀기)

cd john-1.7.8

cd src

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

make(시작)

make clean SYSTEM(현재 리눅스 서버 시스템이 무엇인지 검사)

make clean generic(조사가 끝나고 그것에 맞게 설정)

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

cd ../run

./john --test (벤츠마킹)

./john /etc/shadow (비밀번호 해독)

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

<실행 결과>


이렇게 간단하거나 사전적 단어로 설정된 비밀번호가 노출된다.

그러나 간단한 비밀번호라도 조금만 길어지니깐 찾질 못했다. 별로 효율성이 높은 툴은 아닌것 같다.


2.Windows 인증구조



<프로세스 설명>

winlogon(winlogon.exe): 윈도우 로그인 프로세스의 한부분이다.

GINA (msGINA.dll): Winlogon 내에서 msGINA.dll을 로딩시켜 사용자가 입력한 계정과 암호를 LSA에게 전달

lsa(lsass.exe): 전달받은 계정과 암호를 검증하기위해 NTLM모듈을 로딩하고 계정을 검증

                      SRM이 작성한 감사로그를 기록하는 역할수행.

SAM (sercurity accounts manager) : 사용자 계정 정보(암호화된 해시값)가 저장. ( 리눅스에 etc/shadow와 같은역할 ,                                                     중요하므로 복사본존재)

SRM (security reference monitor) : 사용자에게 고유의 SID를 부여한다. 

                                                  SID에 준하는 권한을 부여함

SID위치: HKEY_LOCAL_MACHINEWSOFTWARE \ Microsot \ Windows NT \ CurrentVersion \ ProileList


<동작원리>

1. 사용자가 ID/PW를 입력한다.

2.GINA에서 입력받은 ID/PW를 LSA에게 전달한다.

3.LSA가 내부에서 NTLM을 실행 시켜 검증을 시작한다.

4.NTLM이 SAM에 저장된 기존의 사용자 정보와 동일한지 비교

5.비교결과가 맞다면 SRM에서 사용자에게 교유 SID 부여

6.부여된 SID가 사용자에게 전달되면서 실행권한을 획득


<윈도우의 인증방식>

1.LM : 윈도에서 가장 약한(가장 최초) 인증 밥법이다. 윈도우 95,98,ME 버전에서 사용되었다.

2.NTLM 버전 1 : LM보다는 안전하지만 취약점이 발견되어 짧게 적용되었다.

3.NTLM 버전 2 : 현재 대부분의 시스템에 적용되고 있다.



'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
SetUID  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

DAY 1 - 어셈블리언어

i2sec/Reverse Engineering 2014. 4. 25. 23:21

1.리버스 엔지니어링이란?

- 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일을 말한다.

  즉, 실행파일을 분석해 소스코드를 알아내는 일


2.어셈블리언어란?

-기계어와 1:1 대응관계에 있는 언어를 말한다.

3.바이너리 디버거 종류

- Olly DBG

  =http://ollydbg.de

  =동적 악성코드 분석시 사용


- IDA Pro

  =http://hex-rays.com/odapro/idadown.htm

  =그래프뷰 기능 존재, 정적 악성코드 분석시 사용


-WinDBG

  =http://www.microsoft.com/whdc/devtools/debugging/default.mspx

  =MS사에서 제작

 =Kernel + User 디버깅 가능 (명령어로 입력해야되는 것이 단점)


4.레지스터

-cpu내에 존재하는 저장공간으로 읽는 속도가 가장 빠르다



32bit General-Purpose Resgisters (32bit 범용 레지스터)

 EAX

EBP 

 EBX

ESP 

 ECX

ESI 

 EDX

EDI 


 EFlAGS

 

 AF

 CF

OF 

PF 

SF 

ZF 


 EIP

 

 


*EAX 

 =누산기, 산술연산을 저장 하는 공간

 =리턴값 저장에 주로 사용


*EBX

 =간접 주소 저장 공간

 = ex> JMP 1000(1000 주소로 이동) == EBX =1000, JMP EBX


*ECX

 = 반복 카운터(반복문에서 사용)

 = 반복이 한번 진행될때마다 안의 값은 하나씩 감소

 = ECX>0

 = ECX=5  == 5번 반복


*EDX

 = EAX의 보조역할

 = ex>64bit의 값을 EAX에 담을 시 상위 32bit는 EAX에 저장되고 하위 32bit는 EDX에 저장된다.


//EBP와 ESP는 stack과 연관

*EBP

=스텍 프레임의 기준점(고정)


*ESP

=스텍 프레임의 최상단(유동적)


*스텍은 높은 곳에서 낮은 곳으로 변수 생성(그림에서는 올라가고 있지만 실질적으로는 주소 감소)


//ESI 와 EDI는 주소와 연관

*ESI

=시작 주소 저장


*EDI

=도착 주소 저장


*EFALGS

=상태값 저장(0,1) -> 1:set , 0:clear

=종류 : AF,CF,OF,PF,SF,ZF


*AF,CF,OF

=>자리올림=1, 자리내림=0


*PF

=> 짝수=1, 홀수=0


*SF

=> 음수:1, 양수 :0


*ZF

=> 산술 연산 결과 저장

=> (산술연살 결과 = 0) == 1 , 나머지 == 0 


*bit별 명칭 분류

EAX 

 

 4byte(32bit)


 AX

 

 2byte(16bit)

 AH / AL

 

 1byte(8bit)

 

 1byte(8bit)



*64bit 레지스터

=32bit 레지스터 앞에 'E'가 붙는데 이것을 'R'로 바꾸면 된다.

=ex> RAX,RCX,RDX


출처 == i2sec



'i2sec > Reverse Engineering' 카테고리의 다른 글

Day-02 어셈블리어  (0) 2014.04.28

TCP/IP

i2sec/Network hacking 2014. 4. 25. 22:13

1. TCP/IP란?

-일상 생활에서 가장 많이 사용하는 통신 프로토콜


2.TCP/IP 4 Layer



1)네트워크 인터페이스 계층

1.OSI 7 계층의 데이터 링크 계층과 물리 계층에 해당

2.MAC 주소를 통해서 통신

    └> 데이터링크계층의 MAC 계층에 의해 사용되는 48bit의 하드웨어 주소

    어떠한 네트워크 카드도 동일한 MAC주소를 가지지 않는 고유한 주소 (16진수로 표현)

    AA : BB : CC : DD : EE : FF

      │                 └>RANDOM한 값(중복 x)

└>제조사 고유 주소(회사 이름이 나올 수도 있다)


3.CSMA/CD :내부통신을 원할하게 하기 위한 통신 방식

   =Carrier Sense : 네트워크에 작업이 있는지 없는지 확인(충동을 피하기 위해)

   =Multiple access : 아무도 통신하고 있지 않을때 자유롭게 통신

   =Collision Detection : 거의 동시에 통신을 하여 충돌 방생

(충동이 발생하면 잼신호를 생성하는데 잼신호는 Carrier Sense로 돌아가게 한다)


4.Ethernet : 근거리에 위치한 컴퓨터간에 데이터 전송이 가능하도록 하는 통신 기능

    현재 가장 널리 사용되는 LAN연결 방법

    CSMA/CD 사용

   Ethernet 구조

Preamble 

Destination Address 

Source Address 

Ether Type 

Data 

FCS 

= Preamble(8 byte) : 프레임의 시작과 끝을 알려 주는 부분(보내는 부분의 시작과 끝을 알아야 통신이 가능하다)

Destination Address(6 byte) : 프레임이 전송되어야 할 목적지 MAC 주소가 들어가는 부분

Source Address(6 byte) : 프레임을 전송하는 호스트의 MAC주소

=Ether Type(2 byte) : 프레임이 어떤 프로토콜 타입과 연계되어 있는지 명시하는 부분

=Data(46 ~ 1500 byte) : 우리가 실질적으로 보내고 싶은 데이터가 담기는 부분

   필드의 크기가 46 ~ 1500 byte인 이유는 최소 전송크기와 최대전송 크기때문인다.

   최소 전송크기보다 작으면 쓰레기값을 넣어서 전송하고 최대 전송 크기보다 크면 쪼개서 보낸다

=FCS(4 byte) : 프레임의 오류를 체크 , CRC라고도 불림


2)인터넷(IP) 계층

1. 네트워크 계층

  = Forwarding : 패킷이 라우터의 입력 링크에 도달 시 라우터는 패킷을 적절한 출력링크로 이동 시켜야함

     즉, 패킷을 보내주는 것

  = Routing : 송수신자가 패킷을 전송할 때 패킷경로를 결정함 (경로를 하나 지날때 마다 1Hop씩 증가)


2. IP(Internet Protocol)

  =대표적인 네트워크 계층의 프로토콜

  =32bit의 2진수(0,1)로 구성

  =실제 표시는 8bit 단위로 점을 찍고 10진수로 표시

       ex> 192.168.1.67  ==  11000000 . 10101000 . 00000001 . 10000011


3. IP 주소 구성

 = 네트워크 주소 : 호스트가 연결되어 있는 네트워크 확인

 = 네트워크의 호스트 중에 하나의 특정 호스트 확인


Class Type 

Netid 

Hostid 

ex> ip: 192.168.0.24                        ==>  Netid : 192.168.0.0

      subnet : 255.255.255.0                      Hostid : 24

*네트워크 주소와 호스트 주소 구별방법

   1. 같은 네트워크에 존재하는 2개 이상의 IP 비교

   2. 서브넷 마스크 확인


4. IP Class                       Byte1                    Byte2                    Byte3                    Byte4

<----------------><----------------><----------------><---------------->

 Class A

 Netid(255.0.0.0)

 Hostid (2의 24승 개)

 Class B

 Netid(255.255.0.0)

 Hostid (2의 16승 개)

 Class C

 Netid(255.255.255.0)

 Hostid (2의 8승 개)

 Class D

 Multicast address

 Class E

 Reserved for future use

*class D 와 class E는 사용하지 않는다.


5. 사설 IP

=장점 : IP 주소를 절약할 수 있습니다.

    내부에서 외부로는 접근이 가능하지만 외부에서 내부로 접근이 불가능(방화벽 기능)

    외부에서의 웜바이러스나 해킹등에 안전


=단점 : 공유기를 이용하여 인터넷을 사용할 경우 공유기에 따라 가끔 오작동을 하는 경우가 있다.

           외부에서 직접 접근이 불가능하므로 게임이나 기타 P2P프로그램의 일부 기능을 이용하지 못할 경우도 있다.


=사설 IP 대역

  A Class :        Netid       : 10.0.0.0/8

                사용가능 주소 : 10.0.0.0 ~ 10.255.255.254

    subnet mask  :  255.0.0.0


  B Class :        Netid       : 172.16.0.0/16

                사용가능 주소 : 172.16.0.1 ~ 172.31.255.254

    subnet mask  :  255.240.0.0


  C Class :        Netid       : 192.168.0.0/24

                사용가능 주소 : 192.168.0.1 ~ 192.168.255.254

    subnet mask  :  255.255.0.0


* Netid 뒤에 " /8, /16, /24"는 서브넷 비트수를 의미

*C Class의 사설 IP는 B Class부터 시작할 수 있다 그러나 구분짓기 위해서 C Class로 표시






출처 == i2sec

'i2sec > Network hacking' 카테고리의 다른 글

day04 - 네트워크 이론  (0) 2014.04.28
Network + OSI 7 Layer  (0) 2014.04.25
정보통신  (0) 2014.04.25
네트워크 해킹 시작..  (0) 2014.04.23

Network + OSI 7 Layer

i2sec/Network hacking 2014. 4. 25. 20:57

1. 네트워크란?

  -Net +Work : 그물 + 일하다.

  -컴퓨터간의 대화를 나누는 것


2. 네트워크 발전 과정

  음성회선 - PSTN - 디지털 전용회선(일반인터넷) - 데이터 전용교환망 - 종합통신망(IP TV + 인터넷 + IP 전화 를 가능하게 한 것)


3. 네트워크 종류

  - 피어 투 피어 네트워크

: P2P. 망 내에 있는 각각의 컴퓨터는 동등(Peer)계층 다른 모든 컴퓨터에 대하여 서버로서 동작하고 동시에                    클라이언트로서 동작한다.


  - 클라이언트 / 서버 네트워크

: 클라이언트는 다른 프로그램에서 서비스를 요청하는 프로그램이며, 서버는 그 요청에 대한 응답을 해주는               프로그램이다.





LAN : 회사,학원,PC방과 같은 소규모 네트워크

MAN : 도시,구 같은 중간 규모 네트워크

WAN : 나라정도의 대규모 네트워크


4. 네트워크 토폴로지

1.Star Topology : 중앙의 시스템과 개별 호스트는 Point to Point 방식으로 연결되어 있다.


*중앙 집중 방식으로 중앙시스템으로 통제가 용의하나 중앙 이스템이 죽으면 전체 네트워크가 죽는 단점이 있다.


2.Bus topology : 네트워크상의 모든 호스트들이 하나의 케이블에 연결된 형태






*한 시스템이 죽어도 다른 시스템에는 지장이 없다.

 그러나 시스템 오류가 발생 했을 시 찾기 힘들고 관리가 힘들다.(대부분 네트워크 형태)

*터미네이터 : 네트워크상에 떠돌고 있는 패킷들을 지워주는 역할


3.Ring Topology : 버스 토폴로지 형태와 비승, 양 종단이 서로 연결되어 링형을 이룸


*절대 충돌이 발생하지 않는 장점을 가지고 있다.

 토큰이라는 것을 통해 토큰에 정보를 담아 통신을하는데 토큰이 올때까지 대기해야되서 속도가 느리다는 단점이 있  다.


4.Mesh Topology : 모든 네트워크 또는 컴퓨터들이 네트워크상이나 개별적으로 네트워크와 연결된 형태


*네트워크가 끊어질 일이 거의 없어 가용성이 극대화되어 있다.

 비용이 많이 든다는 단점이 있다.


5. OSI 7 Layer

  *정의 : 국제 표준 기관 ISO가 개방형 통신을 할 수 있게 만든 모델, 통신을 위한 7가지 절차


OSI 7 Layer

PDU 

Device 

 7 Layer

 응용(Application) 계층

 

 

  6 Layer 

 표현(Presentation)계층

 5 Layer

세션(Session) 계층

 4 Layer

 전송(Transport) 계층

 Record or Segment

 TCP / UDP, ICMP등

 3 Layer

네트워크(Network)계층 

 Packet or Datagram

 Router, L3 switch

 2 Layer

데이터링크(Datalink) 계층 

 Frame

 Switch, Bridge

 1 Layer

물리(Physical) 계층 

Bit 

 Repeater, Hub


*1 Layer - Physical

-Bit 단위(0,1)

-전기, 기계 기능적인 특성을 이용하여 통신 케이블로 데이터 전송

-대표 장비 : 리피터, 허브


*2 Layer - Data Link 

-Frame 단위

-물리적 링크를 통해 데이터를 신뢰성 있게 전송하는 계층. 네트워크를 통해서 데이터가 전송될 때 전송로 역할

-내부통신(게이트웨이를 빠져나가지 않고 통신)에서 사용되면 MAC주소(PC 고유 주소)를 이용하여 통신한다.

-대표장비 : 브릿지 , 스위치


*3 Layer - Network

-packet 단위

-라우팅 프로토콜을 사용하여 최적의 경로를 선택

-외부통신(게이트웨이를 나가서 통신)에서 사용되며 IP를 이용해서 통신한다.

-대표장비 : 라우터

-ex>네이버 접속하는 실제 형태 : pc -> Gateway -> DNS Server -> www.naver.com


*4 Layer - Transport

-Segment 단위

-프로토콜(TCP, SPX등)과 관련된 계층으로, 오류 복구, 흐름 제어 담당

-두 시스템간의 신뢰성 있는 데이터 전송을 보장

-시스템 종단 간에 투명한 데이터 전송을 양방향으로 행하는 계층

-TCP : 신뢰성 있는 전송 방식 , 신뢰성 검사 때문에 UDP보다 속도가 느리다, 연결지향형



-UDP : 비신뢰성 전송 방식, 신뢰성 검사가 없어 TCP보다 속도가 빠르다, 비연결지향형

    요청이 들어오면 연결이 되어있는지 확인하지않고 일단 보내는 형식



6.INTERNET

-TCP/IP 프로토콜 모음을 사용하는 네트워크들의 집합

 -국내 인터넷 현황










출처 == i2sec


'i2sec > Network hacking' 카테고리의 다른 글

day04 - 네트워크 이론  (0) 2014.04.28
TCP/IP  (0) 2014.04.25
정보통신  (0) 2014.04.25
네트워크 해킹 시작..  (0) 2014.04.23

정보통신

i2sec/Network hacking 2014. 4. 25. 20:46

1.정보와 데이터

   -데이터 : 인간이나 컴퓨터가 처리할 수 있도록 실제 생활의 많은 일들을 간단히 문자,기호,숫자 등으로 표현한 것

             즉, 정리 되지 않은 많은 양들의 자료의미


   -정보 : 특정 목적을 위해 의미를 부여한 데이터

           즉, 데이터를 우리가 필요한 부분만 사용할 수 있게 가공한 것


2.정의

 -정보 생산자로부터 그 정보를 필요로 하는 소비자에게 전달하는 행위


3.정보통신의 3대 목표

정확성   /  효율성   / 보안성- - 기밀성 : 암호화 여부 의미

    l - 가용성 : 우리가 얼마나 사용 가능 한지 의미

    - - 무결성 : 정보가 전달되면서 변조되었는지 의미


4.프로토콜

 * 정의 : 네트워크 장비들을 통해 각 컴퓨터들이 데이터를 주고 받는 규칙

 즉, 통신을 하기 위한 언어이다.


 * 프로토콜 3요소

    : Syntex     /  sematics   /  Timing(원할때 전송이 되야하는 것)


 * 프로토콜의 기능

    1.주소지정(addressing)

: - 보내고자 하는 상대방의 이름을 알아야 전송이 가능하다. 

   이 이름이 IP이고 전송할 때 IP주소를 설정해야 한다.


    2.순서지정(Sequencing)

: - 데이터는 순서대로 전송되지 않는다. 그런데 상대방은 보낸 순서대로 데이터를 받아야 보낸 내용을 정확하게 받을 수있다.

   그래서 보낼때 순서를 명시하여 보내야된다.(Sequence number)

 - 이 기능은 연결지향형에서만 사용한다.

    3.단편화와 재조합(Fragmentation and Reassembly)

: - 데이터를 교환하는 프로토콜의 경우 블록 단위로 분할하여 전송한다.

 - 데이터를 블록 단위로 분할하는 것을 단편화(Fragmentation)라고 하며 단편화시 분해 후 번호를 매겨서 전송한다.(Fragment number)

 - 단편화(Fragmentation)시 최대 전송 크기는 1500byte이고 MTU(maximum transmission unit)라고 하며 최소 전송 크기는 46byte이고 MTU(minimumtransmission unit)라고 한다.

(만약 보내는 데이터가 46byte보다 작을시 나머지 공간에 쓰레기 값을 넣어 전송)

 - 받은 개체는 단편화된 데이터를 다쇼ㅣ 원래 데이터로 조합하는데 이것을 재조합(Reassembly)라고 한다.

    

    4.흐름제어

: 수신 측 시스템에서 현재 시스템 상황에 맞게 받은 데이터의 양,속도 제어하는 것



 * 프로토콜의 특성

    -표준/비표준 프로토콜


     송신자와 수신자의 통신언어(프로토콜)가 달라 전달받은 의미 해석을 위해 여러번 절차를 걸쳐야해 속도가 느리다.




   같은 언어(프로토콜)를 가지고 통신하므로 속다가 빠르다.








출처 == i2sec

'i2sec > Network hacking' 카테고리의 다른 글

day04 - 네트워크 이론  (0) 2014.04.28
TCP/IP  (0) 2014.04.25
Network + OSI 7 Layer  (0) 2014.04.25
네트워크 해킹 시작..  (0) 2014.04.23