Directory

i2sec/Linux 2014. 7. 31. 01:11

1. 기본 디렉토리



* "/"

- 루트 디렉토리(최상위 디렉토리)

- 이 디렉토리를 기준으로 모든 디렉토리가 생성됨

- 모든 디렉토리의 출발점이자 다른 파티션의 연결점


* "/bin"

- 시스템을 사용하기 위한 기본적인 명령어를 포함하는 디렉토리                                                                                                    

  (cp, mv, vi 등)

- 일반 사용자까지 모두가 사용할 수 있는 명령어


* "/boot"

- 부팅에 필요한 커널과 핵심 파일이 들어 있는 디렉토리


* "/dev"

- 장치 파일이 위치하는 디렉토리

- /dev/null은 쓰레기통과 같은 영역


* "/etc"

- 시스템 설정파일이 들어가는 디렉토리(IP, 방화벽, P/W 등)

- 시스템이나 사용자 관리를 위한 자료 파일 관리자용 명령어


* "/home"

- 일반 사용자의 홈 디렉토리가 생성되는 곳


* "/lib"

- 시스템 운영 및 프로그램 구동할 때 필요한 공유 라이브러리


* "/root"

- 시스템 관리자, 즉 root 사용자의 홈 디렉토리


* "/mnt"

- CD-ROM과 플로피 장치에 대한 기본 마운트 포인트를 제공


* "/proc"

- 프로세스와 시스템 정보를 제공하기 위한 목적으로 설계된 가상 파일 시스템을 사용하는 디렉토리

- 프로그램을 구동하게 되면 /proc에 해당 프로세스의 PID 번호에 해당하는 데렉토리를 생성하여 프로세스의 진행 상황을 추적하고 관리

- 시스템 및 커널 정보는 문자로 디렉토리와 파일 명이 이루어지며

  현재 실행중인 프로세스의 정보는 숫자로 이름이 이루어진다.


* "/sbin"

- 관리자가 사용하는 시스템 운영에 필요한 명령어가 존재하는 디렉토리

  (fdisk, reboot, shutdown 등)


* "/tmp"

- 프로세스 생성 과정에서 발생되는 임시파일을 저장하는 디렉토리


* "/usr"

- 프로그램을 설치할 때 패키지에 포함된 대부분의 파일이 이공에 설치

- windows의 Programs files 폴더와 유사


* "/lost + Found"

- 개별 파일 시스템의 최상위 디렉토리 마다 존재

- 일반적인 상황에서는 이 디렉토리에 파일이 존재하지 않는 것이 정상

- fsck(File System Check) 명령어가 사용되는 디렉토리

- 시스템 부팅 시 파일 시스템의 이상 유무를 진단하여 문제가 있으면 구동

- 시스템을 점검 시 파일이 손상된 경우 해당 파일 시스템에 존재하는 lost+found 디렉토릴 이용하여 복구


* "/opt"

- add-on 패키지가 설치되는 디렉토리

- 표준 레드햇 리눅스 배포판에 존재하지 않는 패키지가 설치될 경우 이 디렉토리에 설치


* "/var"

- 내용이 자주 변경되는 가변 자료가 저장되는 디렉토리

-로그, 스풀, 웹 서버 관련 자료, 데이터베이스, FTP의 최상위 디렉토리 등이 이 곳에 저장된다.



2. 자주 사용되는 파일


*"/etc/passwd"

- 사용자 계정이 저장되는 파일


*"/etc/shadow"

- 계정의 P/W가 저장되는 파일, MD5로 암호화되어서 저장된다.


*"/etc/sysconfig/iptables"

- 방화벽 설정을 하는 파일


* "/etc/hosts.allow", "/etc/hosts.deny"

- 각각 화이트,블랙 리스트 기반으로 접속자의 IP와 접속방법을 제어하는 파일들 


3. 기타

* 현재 디렉토리와 상위 디렉토리

- "./"는 현재 디렉토리를 의미하고 "../"는 상위 디렉토리를 의미한다


* 절대경로와 상대경로

- 절대 경로는 최상위 디렉토리 부터 시작하는 경로를 의미

  (ex> /etc/passwd, /usr/lib)

- 상대 경로는 현재 내가 있는 디렉토리를 시작으로 하는 경로를 의미

  (ex> lib -> cdrom => ../../mnt/cdrom,  cdrom->floopy => ./floopy)


'i2sec > Linux' 카테고리의 다른 글

프로세스  (0) 2014.08.14
권한  (0) 2014.08.14
사용자 계정 / 그룹 관리  (0) 2014.08.13
명령어 정리  (0) 2014.07.31
개요  (0) 2014.07.31

개요

i2sec/Linux 2014. 7. 31. 01:10

1.Linux 개요


Linux는 Windows의 프로그램이 아닌 독자적인 OS 이다.

Linux는 공개버전과 상용버전으로 나뉜다.

그러나 기본적으로 Linux는 소스코드가 공개된 누구나 변경 수정이 가능한 오픈소스 OS이다.

Linux는 다국어를 지원



2.Linux 탄생 배경


리눅스 토파즈라는 사람이 커널 개발

리차드 스톨만이 모든 소퓨트웨어는 공유되고 공유에 대한 제한 철폐를 목표로 창립한 FSF의 GNU 프로젝트와 발전

 *GNU(Gnu Not Unix)

 *GPL(General Public License)라이선스 -> 소스 공개 및 수정 재 배포 가능



3.사용범위


-개인용 데스크탑

-워크스테이션 -> 개발자 환경

-서버 -> 웹,메일,DB,FTP 서버등 

-임베디드 -> TV, PDA, 핸드폰등

-클러스트링(pc방 카운터 pc 기능)



4.Linux 구조



-Kernel Mode/User Mode

-((((H/W(cpu,ram))커널)쉘(csh,bash)응용프로그램(vi 에디터, x 윈도우))

 -우리가 쉘에서 명령어를 입력하면 그 것이 커널로 전달되어 커널에서 하드웨어들을 제어한다.

  (우리는 앞으로 리눅스에 접속하면 서버를 다루고 원격접속을 하기 떄문에 x윈도우같은 응용프로그램은 사용하지 않는다)

=>Kernel은 H/W와 S/W의 징검다리 역활을 한다.

-커널소스 숫자

 -linux-x.y.z.tar.gz의 형식

  -x : 주 버전

  -y : 홀수 -> 베타버전, 짝수 -> 안정

  -z : 버그 수정 횟수

 -숫자가 높을수록 장치지원이 높음

=>취약점을 찾을 수 있는 가장 기본적인 요소이다.


-커널과 모듈

 -자주 사용하는 요소 : 커널에 포함

 -가끔 사용하는 요소 : 모듈(독립적)로 작성하여 필요 시 마다 호출


-Linux 특징

-대소문자의 구별이 분명하다.

-다중 사용자, 다중 작업 시스템

 -사용자 추가

  -root 사용자만이 권한을 가지고 있다.

  -설정 파일:/etc/default/useradd

  -기본 설정 파일 저장 : /etc/skel -> 사용자 생성시 마다 설정 반영

   (예 : 'ms'라는 사용자 추가시 /etc/skel -> /home/ms)

-서버로 사용하기 적합

-계정과 비밀번호가 필요

-명령어로 하드웨어를 제어(Shell 역할)

-ROOT 사용자 : 계정의 관리

-홈 디렉토리 : 각 사용자의 공간

-환경설정 파일 : 각 사용자별 환경(예:path)

 (.bashrc(단축명령어 저장), .bash_profiles(환경변수 저장))


*로그

 누가 시스템에 접근하고 제어한 기록이 남는 곳이다.

 프로그램, 서비스의 발생 시 오류도 기록한다.

 (/var/log)



5.Linux system


-리눅스 실행 과정

 전원 on ->시스템 reset -> 로그인창 -> 아이디/페스워드 입력 ->쉘 실행 ->명령어 입력 -> 커널에게 명령어 전달 ->커널이 하드웨어 조작 -> 모니터 출력

|_________________________________순환_____________________________________|


-가상 콘솔

 *기본적으로 6개 제공된다

 *Ctl+Alt+F1~F6은 Text Mode 형식의 콘솔: CLI

 *Ctl+Alt+F7은 X 윈도우로 전환 : GUI


-ROOT 계정

 *시스템 설치시에 자동으로 생성된다.

 *시스템 관리를 위해 모든 권한을 가지고 있다.(Linux의 대통령)


-일반 계정

 *시스템 관리자(root 사용자)에 의해 생성된다.

 *시스템 관리자가 초기 패스워드를 설정해준다.

  (만약 패스워드를 설정하지 않으면 접속할 수 없다.)

 *개인 사용 환경 변경 및 저장이 가능하다.


-SHELL

 *시스템과 사용자간의 대화를 가능하게 하는 명령어 해석기이다.

  ->우리가 입력한 명령어를 Kernel에게 전달

 *종류 : bash,C shell, V shell등

  ->기본 기능이나 작동법은 동일

 *기능 : 내부명령/외부명령을 실행해주는 명령프롬프트다.

         여러 명령어를 연결해서 사용가능하다(파이프:|)

         입/출력 리다이렉션으로 명령 방향 전환이 가능하다(>,>>,<,<<)

         특수문자를 해석 및 치환한다(명령어 치환)

         지역변수/환경변수를 관리한다.


-사용자 환경 설정 파일

 -.bash_logout, .bash_profile(환경변수 등록), .bashrc(단축명령어 등록)라는 환경 설정파일이 존재하는데

  이러한 환경 설정파일들은 새로운 사용자가 추가될 때 마다 각 사용자의 홈디렉토리에 복사된다.

  (원본파일은 /etc/skel(계정이 생성되는 곳) 에 존재한다)

 -모든 사용자의 환경설정 파일은 /etc/profile, /etc/bashrc 이다.


-PATH 디렉토리 추가

 현재 로그인에서만 추가할 때(로그아웃시 소멸된다,)

  -PATH = $PATH <추가할 디렉토리>

 특정 사용자에게 추가할 때는 ~/.bash_profile 에 추가해준다(로그아웃해도 소멸되지 않는다)

 전체 사용자에게 추가할 때는 /etc/profire 에 추가해준다(역시 로그아웃시 소멸되지 않는다)


-단축명령어 등록

 현재 로그인에서만 추가할 때(로그아웃시 소멸된다,)

  -alias <단축어> = 'FULL 명령어'

 특정 사용자에게 추가할 때는 ~/.bashrc 에 추가해준다(로그아웃해도 소멸되지 않는다)

 전체 사용자에게 추가할 때는 /etc/bashrc 에 추가해준다(역시 로그아웃시 소멸되지 않는다)


-Linux 기본명령어

*echo : 뒤에나오는 문자열 출력

(예 : echo shell -> shell 출력)

*echo $SHELL : 현재 내가 사용하고 있는 SHELL을 확인할 수 있는 명령어(실행결과 : /bin/bash)

 ($ : 변수 인식 인자값으로 단어를 변수로 인식 시켜준다)

*echo $? : 이전 작업이 제대로 수행됬는지 확인할때 사용(단, 바로 전에 수행했던 명령어만 확인된다!)

 (잘됬으면:0, 잘못됬으면:숫자)

*echo $PATH : 현재 환경변수 확인

*cd : 디렉토리 이동시 사용

*clear : 화면의 모든내용을 지워줌(Ctrl + L)

*history : 로그인 후 지금까지 사용한 명령어를 보여준다

 (history 목록을 지우고 싶을때 : history -c)

 (로그아웃시 .bash_history에 저장 된다)

'i2sec > Linux' 카테고리의 다른 글

프로세스  (0) 2014.08.14
권한  (0) 2014.08.14
사용자 계정 / 그룹 관리  (0) 2014.08.13
명령어 정리  (0) 2014.07.31
Directory  (0) 2014.07.31

day04 - 네트워크 이론

i2sec/Network hacking 2014. 4. 28. 22:22

1. subnetmask

2. routing

3. NAT

4. Windows IP 설정

5. Linux IP 설정

6. ARP/RARP

7. ICMP

-송신 측의 상황과 목적지 노드의 상황 진단 == PING

-IP계층 또는 보다 상위 계층 프로토콜(TCP, UDP)에 의해 이용

-ICMP 메세지는 사용자 프로세스에게 되돌려 주는 에러 메세지 생성

-ICMP 메세지는 IP 데이터 그램으로 전송

-IP Scan, Ping of Death(DOS공격)에 이용


*Ping of Death(DOS공격)

예전에는 가능했던공격. 많은 양을 보내 CPU 과부하시킨다

그러나 요즘에는 과부하가 되기전에 네트워크 선로가 다차서 다른 사용자가 네트워크가 안될 수도 있다.



IP헤더 

ICMP 메세지 

<----------------------------------------------IP 데이터 그램-------------------------------------------------->


8. TCP

3-way handshaking(세션 생성)

*netstat에 표시


Listening : 서버가 특정 클라이언트에 대해서 듣고 있다는 표시

Established : 현재 연결중인 상태. 3-way handshaking이 끝나고 난 다음 상태이다.

Wait : 대기중인 상태

-세션의 갯수가 많을수록 과부하가 걸린다.



Source port

destination port 

 sequence number

acknowledgement number 

 data offset

reserved 

URG 

ACK 

PSH 

RST 

SYN 

FIN 

 windows size

 checksum

urgent pointer 

options 

padding 

data 

-source port : 세그먼트를 전송하는 호스트에게 있는 프로그램의 포트 번호

-destination port : 수신자 호스트 상에서 수행되는 프로그램의 포트번호

-sequence number : 신뢰성 있는 연결을 보장하기 위한 번호

   서로 다른 ISN(Initial Sequence Number)을 생성하여 사용

-ACK : 응답

-PSH : 우선 처리 요청(4계층 TCP -> 7계층 응용)(ex>토렌트)

-RST : 초기화, 강제종료

-SYN : 응답 요청

-FIN : 연결 종료 요청

-checksum : IP헤더에 오류가 있는지 검사

-data : 실질적인 데이터


*포트

-포트가 있는 이유 : 서비스 별로 연결 방식이 다른데 통합하게 디면 비동기화 통신 방식이 형성되기 때문에 속도가 느려진다

   즉, 서비스를 원할하게 하기 위함.

-출발지 포트는 "랜덤"하게 선정되어 나갈때 마다 달라지지만 목적지 포트는 서비스별로 정해져있다.

-서비스 포트는 규약같은 것이기 때문에 거의 바뀌지 않는다.


*TCP(연결할때까지만 사용) ----------> HTTP,SSH,TELNET(응용프로토콜로 바뀜)


9.UDP

-TCP와 달리 handshaking과정이 없다

-비신뢰성 연결이다.(NO reliable data transfer)

-흐름제어를 하지 않는다(No Flow Control)

-TCP에 비해 간단한 전송이 이루어진다(No Congestion Control)

-신뢰성 검사를 하지않고 빠른 전송이 필요할때 사용


10.알아야될 포트

포트번호 

서비스  

서비스 내용 

20/21   (TCP) 

 FTP(-data)

FTP연결 : 21 data전송 : 20 

FTP 연결 시 인증과 컨트롤을 위한 포트 

22 (TCP) 

SSH 

패킷이 암호화되어 전송

Telnet과 같은 비 암호화 프로그램을 대체 

23 (TCP) 

TELNET 

Telnet 서비스로서 원격지의 서버의 실행 창을 얻어낸다. 

25 (TCP) 

SMTP 

메일을 보낼 때 사용하는 서비스

(잘 사용하지 않는다) 

53 (UDP) 

DNS 

Domain Name Service 이름을 해석하는데 사용하는 명령어 

80 (TCP) 

HTTP 

Hyper Text Transfer Protocol 웹 서비스 

*Telnet/FTP : 연결 시 주고 받는 패킷이 암호화 되지않아서 노출되기 쉽고 노출된 패킷으로 복구도 가능하다.

*SSH/SFTP : Telnet/FTP의 암호화되지 않는 단점을 보안한 응용 프로그램으로서 openssl 사용한다


11.트래픽 분류

-유니캐스트(Unicast) : 다른 클라이언트와 1:1 통신


-멀티캐스트 : 특정 그룹과 통신(1:다수)

-브로드캐스트 : 네트워크 내 전체 사용자에게 전송(x.x.x.255 이용)


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

TCP/IP  (0) 2014.04.25
Network + OSI 7 Layer  (0) 2014.04.25
정보통신  (0) 2014.04.25
네트워크 해킹 시작..  (0) 2014.04.23

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