Level13으로 접속해서 우선 hint를 열어봅니다.

attackme의 코드이겠구요.

취약한 함수 strcpy를 사용하고 있음을 알 수 있으며, 아마 저부분을 이용해서 공격을 해야겠죠.

 

그런데 i에 있는 0x1234567값이 변조가 된다면 프로그램은 i를 통해 스택의 데이터가 변조 되었음을 감지하고 Warnning: Buffer Overflow !!!라는 문장을 출력하고 프로그램이 종료 될듯 합니다.

 

i의 값을 변조 하지 않고 ret값을 바꾸는것이 핵심이겠네요.

어셈블리로 코드를 확인해 보니 <main+3>에서 1048만큼의 공간을 확보하고 있습니다.

그후 movl $0x1234567, 0xfffffff4(%ebp)를 통하여 ebp-12지점에 0x1234567을 입력 하네요.

<main+9>까지 진행 된다음 스택 구조는 다음과 같이 됩니다.

ret(4byte)

ebp(4byte)

dummy(8byte)

0x1234567(4byte)

dummy(12byte)

buf[1024](1024byte)

 

Python –c ‘print “A”*1036+”\x67\x45\x23\x01”+”A”*12+[쉘코드주소] 이렇게 넣어주면 아마 문제 없이 돌아갈듯 합니다.

 

그럼 이제 환경변수에 쉘 코드를 등록하고 쉘 코드의 주소를 얻어오면 되겠습니다.

이제 i를 바꾸지 않고 ret를 덮어주면 됩니다.

문제 없이 level14계정의 쉘이 획득 되었습니다.


level14의 패스워드는 what that nigga want?이네요.

Level12에 접속하고 파일목록을 확인해 보니 level11과 별 차이가 없군요.

attackme 파일을 공격해서 권한을 획득하라는 것 같습니다.

hint를 확인해 봅시다.

attackme의 코드인듯 하고, 취약한 코드로 보이는 gets( str );가 보이네요.

gets는 사용자의 입력을 \0을 만날때까지 받으라는 함수입니다. 몇자를 입력받는지 제한이 없으므로 이 함수로 인하여 BOF가 발생합니다.

 

strcpy대신에 gets함수가 사용된 것을 제외하고는 level11과 완전 동일합니다.

 

풀이법 또한 level11과 똑같은 방식으로 스택의 ret를 쉘코드가 있는 메모리의 주소로 바꿔주면 됩니다.

메모리에 str의 영역이 0x108로 잡혀있으니, “A”*268+[쉘코드]주소를 입력해 주면 되겠네요.

 

다만 프로그램이 실행되고 사용자 입력 대기때 값을 넣어주어야 하니 파이프를 사용해야 합니다.

 

우선 환경변수에 쉘코드를 등록해주도록 하겠습니다.

이제 쉘코드의 주소를 가져오구요.

level11과 여기까지는 동일합니다. 이제 파이프를 통해 입력값을 전달하여 ret를 덮어 주면 됩니다.

level13의 쉘이 떴네요. 


패스워드는 have no clue입니다.


Level11과 공격 방법이 동일하여 쉽게 풀 수 있는 문제였네요.

수고하셨습니다.


여담이지만 투명색의 터미널창이 편집을 하면 검은색으로 바뀌는건 안이쁘네여;;

이번 문제풀이에는 shell코드, NOP 등 추가적으로 필요한 개념이 들어갑니다. 그 모든 내용을 여기서 설명하기에는 내용이 길어질 뿐더러 앞서 잘 정리되어 있는 자료가 있으니 그것을 먼저 보는것을 추천해 드립니다. 자료를 잘 정리해주신 달고나님 항상 감사합니다.

buffer_overflow_foundation_pub.pdf

 

Level 11에 들어가서 파일 목록을 확인하면 다음과 같이 나옵니다.

hint가 보이고 attackme라는 실행파일이 보이네요.

 

hint의 내용은 다음과 같습니다.

느낌이 attackme의 코드인 듯 합니다.

 

attackme는 권한을 상승시키고 실행시 매개변수를 str에 복사하고 출력해주는 프로그램입니다.

$./attackme test라고 입력했더니 test를 출력해주네요.

 

최신 ide에서는 strcpy 대신 strncpy를 사용하길 권장합니다. strcpy는 복사할 문자열의 길이를 명시해 줄 수 없기 때문입니다. 즉 입력값의 길이가 256이 넘어가게 된다면 스택의 str[256]영역을 넘어 다른 영역까지 침범하게 됩니다.

 

gdbattackme를 확인해 보겠습니다.

<main+3>를 통해 char str[256]의 공간을 스택에 마련했습니다. 256에 대항하는 0x100공간에 dummy0x8만큼 더 할당해 주었네요.

<main+3>까지 실행이 되면 스택은 다음과 같이 되어 있을것입니다.


ret(4byte)

ebp(4byte)

dummy(8byte)

str(256byte)


Strcpy함수를 사용하여 스택을 채우기 때문에 str의 영역을 넘어 ret영역까지 건드릴 수 있습니다.

아무 값 268(256+8+4)과 추가로 4byte를 넣어 주면 우리가 ret에 원하는 값을 덮어 씌울 수 있습니다.

$./attackme `python –c ‘printf “A”*268 + “\x2c\x5a\xff\2f”’` 라고 실행하면 스택에 다음과 같이 들어갈 것입니다.


ret : 0x2fff5a2c

ebp : AAAA

dummy : AAAAAAAA

str[256] : AAAA…..AAAA


그럼 프로그램이 끝날때 eip0x2fff5a2c로 바뀌고 0x2fff5a2c번지에 있는 코드를 실행하게 되겠죠.

 

Eip를 변조하는 것은 되었으니, 이제 실행할 코드를 삽입하고 그 위치를 구해야 합니다.

사실 스택에는 윗부분이 더 있습니다. 그부분은 다음과 같이 구성되어 있습니다.


env

argv

argc(4byte)

ret(4byte)

ebp(4byte)

dummy(8byte)

str(256byte)


여기서 핵심은 제일 위인 env, 즉 환경변수 부분입니다. 이 부분에 우리가 원하는 어셈블리어 코드를 삽입해주고, ret를 코드가 들어있는 부분의 주소로 설정해 주면 됩니다.

 

삽입할 코드는 쉘을 띄우기 위한 쉘코드 입니다.

 

\x31\xc0\x31\xdb\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80

 

환경 변수에 쉘코드를 등록하면 스택의 환경변수 영역에 자동으로 올라갑니다.

환경변수에 쉘코드를 등록하고 확인까지 하였습니다.

이제 이 쉘코드가 들어있는 주소를 획득하여 attackme스택의 ret부분에 넣어주면 됩니다.

쉘코드의 주소는 다음과정을 통해 얻을 수 있습니다.

이제 얻은 쉘코드의 주소를 ret에 덮어 주기만 하면 됩니다.

획득한 쉘코드의 주소로 ret를 덮어 주었더니 정상적으로 쉘이 떴고, 사용자 또한 level12가 맞습니다.



level 12의 패스워드는 it is like this네요.

BOF를 이용하여 푸는 방법 이외에 Format String Bug를 이용한 풀이 방법도 있으니 그것도 한번 찾아보셔서 시도해도 좋을 것 같습니다.

수고하셨습니다.


Level10을 들어가서 hint를 입력하면 다음과 같이 나옵니다.



두 명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.

그 대화방은 공유 메모리를 이용하여 만들어졌으며,

key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라.

 

이번 문제는 공유 메모리를 도청하는 문제로 보입니다.

 

공유 메모리는 여러 프로세스가 같이 쓰는 메모리를 말합니다. 이 기술을 이용하면 프로세스 끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있습니다.

같은 메모리 영역을 공유하기 위해서는 공유메모리를 생성한 후 프로세스 자신의 메모리를 사용하듯 사용하면 됩니다.

 



ipcs를 쓰면 현재 사용하고 있는 공유 메모리의 정보가 출력됩니다.

Key: 0x1D6A(7530)

Owner: root

Perms: 666

Bytes: 1028

 

권한이 666으로 되어 있으니 모든 사용자가 볼 수 있겠군요.

C언어로 공유메모리 접근 프로그래밍을 해줍니다.


http://forum.falinux.com/zbxe/index.php?document_srl=423456&mid=C_LIB

코드는 위 링크를 참고하여 작성했습니다.

 

컴파일 한 후 프로그램을 돌리면 level11 암호가 출력됩니다.



Level11의 암호는 what!@#$?이네요.

 

공유메모리를 사용할때는 권한 설정을 잘 해야겠습니다.

Level9 로그인하고 힌트를 확인해 봅니다.



/usr/bin/bof의 코드를 주고 이를 이용해서 level10의 권한을 얻으라고 하네요.

파일 이름도 그렇고 코드 내용을 봤을 때 buffer overflow를 이용하여 문제를 풀으라고 하는것 같네요.

 

Buffer Overflow란 메모리의 크기보다 더 큰 데이터가 들어와서 다른 메모리에까지 영향을 주는 것을 말합니다.

해킹 공격의 기본이 되는 기법이기도 하죠. Buffer Overflow에 대한 추가 내용은https://ko.wikipedia.org/wiki/퍼_버플로를 참고하시기 바랍니다.

 

프로그램을 실행하면 메모리에 우선 할당이 되는데, 다음과 같은 형식으로 할당이 됩니다.

여기서 함수에서 선언한 지역변수는 stack영역에 들어가게 됩니다. 스택은 위에서부터 아래로 자라므로.

buf2[10]가 들어가고 그 아래에 buf[10]가 할당 되게 됩니다.

즉 프로그램에서 입력을 받아 값을 buf에 넣으므로 만약 buf[10]보다 큰 데이터가 들어오면  buf2[10]에도 영향을 주는 것입니다.

 

여기서 알아야 하는것은 메모리에 값이 들어갈때 어떻게 들어가는 지도 알아야 합니다.

지금 buf2[10]buf[10]은 메모리의 스택영역에 다음과 같이 들어가 있습니다.



메모리에 공간을 할당할때 Full Word Boundary에 맞춰 8의 배수로 할당 되므로, Buf[10]Buf2[10]사이에는 빗금친 6칸의 사용하지 않는 공간이 존재합니다.

 

입력이 buf[10]에 되니깐 만약 01234라는 5자리의 데이터를 집어넣으면 다음과 같이 들어갑니다.



즉 할당된 메모리의 오른쪽부터 값이 들어갑니다. 왜냐하면 메모리의 번지가 낮은쪽 부터 채우기 때문입니다. 그림상에서 왼쪽이 높은 주소이고 오른쪽이 낮은 주소입니다.

 

입력값이 hackerschool ftz level9이라면 10자리가 넘고 Buffer Overflow가 발생해 다음과 같이 들어갑니다.



코드를 보면 strncmp(buf2, “go”, 2) ==0 buf2의 앞 두 글자가 “go”면 권한이 상승이 되고 쉘이 열리게 되어 있네요. 즉 메모리에 go가 다음과 같이 들어가도록 해야 합니다.



이렇게 값이 들어가려면 16자리의 글자 뒤에 go를 붙여 주면 될것 같습니다.

0123456789123456go라고 입력해 보겠습니다.


원했던 Good Skill!이 출력되고 level10권한으로 쉘이 실행됨을 볼 수 있습니다.

이제 my-pass로 비밀번호를 확인하면 level10의 비밀번호를 획득 하실 수 있습니다.

Level10의 비밀번호는 interesting to hack!입니다.

 

사실상 이문제는 go8번 이상 출력하기만 하면 풀리는 문제입니다만, 원리를 확실히 짚고 넘어가시는 것이 좋습니다. 메모리에 프로그램이 할당 되는 것과, 변수가 스택에 어떻게 할당 되는지, full word boundary가 무엇인지 등 중요한 개념이 많이 나오니 꼭 숙지하고 넘어가셨으면 합니다.

Level8 접속하여 우선 힌트를 확인합니다.



level9shadow파일이 서버 어딘가에 숨어있다.

그 파일에 대해 아려진 것은 용량이 “2700”이라는 것 뿐이다.

 

이번 문제는 우선 용량이 2700인 파일을 찾아야 겠네요.

근데 여기서 발생하는 문제는 단위가 무엇인지 모른다는 것입니다.

단위가 b일수도 k일수도 c일수도 있습니다.

 

Find명령어의 메뉴얼을 보면 –size옵션에 대한 설명이 나와있습니다.

 

       -size n[bckw]

              File uses n units of space.  The units are  512-byte  blocks  by

              default  or  if ??b?? follows n, bytes if ??c?? follows n, kilobytes

              if ??k?? follows n, or 2-byte words if ??w?? follows  n.   The  size

              does  not  count  indirect  blocks,  but it does count blocks in

              sparse files that are not actually allocated.

 

단위로 사용할수 있는것은 b, c, k, w가 될것 같습니다.


운좋게 두번만에 찾아졌네요.

4가지 항목 중에서 2번째 /etc/rc.d/found.txt.가 가장 의심스러우니 내용을 확인해 보죠.

 


level9shadow내용이네요.

 

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

 

level9계정의 암호가 되는 부분은$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.입니다.

암호화된 이것을 복호화 해주면 level9의 암호가 나오는 것입니다.

암호는 MD5방식으로 암호화 되어 있으니 이를 복호화 해주면 되겠습니다.

 

MD5에 대한 내용은 위키를 참고해주세요 : https://ko.wikipedia.org/wiki/MD5

 

Shadow암호는 John the Ripper라는 프로그램으로 복호화 가능합니다.

http://www.openwall.com/john/에서 자신의 운영체제와 맞는 것을 설치해 주시면 됩니다.

 

John the Ripper를 설치한 후 run폴더 아래에 passwd.txt파일로 shadow내용을 집어 넣습니다.



그리고 터미널을 실행시킨후 run폴더로 들어가 john passwd.txt를 입력합니다.



위와 같이 복호화가 되면 암호를 보여줍니다. 자세히 보기 위해 john –-show passwd.txt를 입력합니다.




shadow형식에 맞춰 암호부분이 복호화 되어 들어나 있음을 알수 있습니다.

Level9의 암호는 apple이네요.

 

파일 사이즈로 find명령어를 사용하는 것과 shadow파일의 형식에 대한 지식, shadow파일을 복호화 하는 방법을 아는 지를 묻는 문제였습니다.

Level7으로 로그인 한 뒤에 힌트를 한번 확인해 봅니다.



/bin/level7 명령어를 실행하면, 패스워드 입력을 요청한다.

1.    패스워드는 가까운 곳에 ..

2.    상상력을 총 동원하라.

3.    2진수를, 10진수를 바꿀 수 있는가?

4.    계산기 설정을 공학용으로 바꾸어라.

 

이번에는 힌트가 좀 많네요.

/bin/level7을 실행하니 암호를 요구합니다.

패스워드가 가까운 곳에 있다고 했으니 level6의 암호 come together을 한번 입력해 보았습니다.



come together은 아닌것 같네요.

근데 이상한 문장이 출력 되었습니다.

_--_--_-   _--____-   _---_-__   _--__-_-

무슨 문장일까요

로컬서버로 구축해서 하시는 경우에는 /bin/wrong.txt파일이 없다는 에러가 뜨는 경우가 있습니다. 이럴 경우에는 해커스쿨 FTZ서버 ftz.hackerschool.org로 접속하셔서 푸는것을 추천드립니다.

 

보니깐 _이루어져 있고 8개씩 나누어져 있습니다.

아마 _0을 의미하는것이고 1을 의미하는게 아닐까합니다.

 

저것을 10으로 변형해주면01101101 01100001 01110100 01100101이 됩니다.

8개씩 4개로 이루어져 있으니 1byte4, 4byte네요.

 

2진수와 10진수의 변환이 힌트였으니 8개로 끊어 10진수로 변환해 보면 109 97 116 101이 됩니다.

 

느낌이 ASCII코드인것 같습니다.

 

ASCII코드란 숫자밖에 모르는 컴퓨터가 문자를 표시하는 방법입니다.

1byte8자리 2진수가 모여 글자 한개를 의미하는 방법입니다.

 



http://ascii.zeemind.com/?hl=ko

 

ASCII테이블을 참고하여 109 97 116 101을 문자로 변경하면 mate라는 4글자 단어가 나옵니다.

 

이를 입력해 보겠습니다.



접근법이 맞았나 보네요.

Level8의 패스워드는 break the world라고 하네요.

 

이번 문제는 2진수와 10진수의 변환 가능과 ASCII의 개념을 알고 있는지를 물어보는 문제였네요.


FTZ level6에 로그인하면 이전의 문제와 달리 힌트가 자동으로 등장합니다.



hint – 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.

아직은 무슨 소린지 모르겠네요.

이 화면에서 아무키나 누르면 다음 화면으로 진행됩니다.


텔넷 접속 서비스 1.하이텔  2.나우누리  3.천리안

2000년대 초반에 존재하던 서비스들이 보이네요.

하이텔을 선택하기 위해 1을 입력 하였습니다.


접속이 거절 되었습니다. 하이텔이나 나우누리로 접속해도 결과는 마찬가지 였습니다.

우선 hint를 한번 짚고 넘어가야겠습니다.

bbs란 예전에 PC 통신 할때 텔넷으로 접속하던 게시판이라 생각하시면 됩니다. 하이텔 나우누리 천리안이 가장 유명했던 bbs들이었죠.

 

위의 사진을 보고 메뉴를 선택하면 나오는 다음 문구는 telnet을 시도할때 나오는 문구입니다.

메뉴를 선택하면 조건에 맞는 ip값이 전달되고 텔넷 명령어가 시작 되는거죠.

1번 메뉴를 눌렀을 때 telnet 203.245.15.76이라는 리눅스 명령어가 실행이 되고 이는 코드상에서 system(“telnet 203.245.15.76”)이런 식으로 구성 되어 있을 겁니다.

 

직접 ip를 집어 넣는 것이면 명령어 구분자 ‘ ; ‘를 이용해서 명령어를 입력할 수 있을 듯 하나 메뉴를 선택 하면 미리 셋팅 되어 있는 명령어가 실행되니 이 방법으론 접근이 쉽지 않을듯 합니다.

 

우리의 목표를 잠시 생각해 보면, level7권한으로 my-pass명령어를 사용해 level7의 명령어를 획득하는게 목표입니다. 근데 로그인하면 자동으로 실행되는 저 프로그램 때문에 아무런 명령어를 입력하지 못하는 상황이네요.

일단 저 프로그램을 종료 시켜서 쉘을 띄우는것이 우선이라 생각됩니다.

 

리눅스에서 실행 프로세스를 죽이는 방법인 Ctrl+C를 눌러봅니다.



ctrl+c는 쓸 수 없다고 하네요.

 

이것 때문에 삽질을 5시간 정도 한것 같네요. Ctrl+d도 해보고 ctrl+z도 해보고 다른 프로세스 인터럽트 방법도 찾아보고하지만 정답은 정말 간단했습니다.

 

저 창이 뜨기 전에 하면 되요.



이처럼 hint가 나왔을때 ctrl+c를 눌러 프로그램을 종료하면 됩니다.

 

그럼 명령어를 입력할수 있는 쉘이 뜹니다.

목록이 뭐있는지 확인하고, 매우 의심스러운 파일의 내용을 확인해보면,



level7의 비밀번호 come together이 나옵니다.

 

굉장히 허탈하고 쉬운 문제였네요.

 

리눅스에서 프로세스를 종료하는 ctrl+c를 알고 있는지에 대한 문제였습니다.

Level4에서 구한 암호를 입력하고 들어가서 우선 파일목록을 한번 봐줍니다.



hint가 보이네요. 당연히 읽어줍시다.



/usr/bin/level5 프로그램은 /tmp 디렉토리에 level5.tmp라는 이름의 임시파일을 생성한다.

이를 이용하여 level6의 권한을 얻어라.

 

우선 /usr/bin/level5를 확인해 봅시다.



level6 setuid가 설정 되어 있네요. 느낌상 저걸 실행하면 my-pass명령어를 통해 level6의 비밀번호를 알 수 있고, 그것이 /tmp/level5.tmp에 저장될 것 같습니다.

/usr/bin/level5를 실행하고 /tmp/level5.tmp에 암호가 있나 확인해봅니다.



/usr/bin/level5를 실행하고 /tmp폴더를 확인해봤는데 level5.tmp는 보이지 않습니다.

아마 /usr/bin/level5프로그램이 종료될 때 임시파일을 지우는 듯 합니다.

 

level5.tmp에 들어있는 내용을 읽는게 이번 level의 문제 요지입니다.

여기서 필요한 공격기법이 레이스 컨디션입니다.

setuid와 임시파일을 듣고 레이스 컨디션을 생각하시면 됩니다.

 

레이스 컨디션을 간단하게 얘기하면 일종의 바꿔치기라 할 수 있습니다. 다른 권한으로 실행되는 프로그램 중간에 끼어들어 자신이 원하는 작업을 하는 기술입니다. 타이밍이 가장 중요하기 때문에 보통 될때까지 실행합니다.

 

레이스 컨디션 공격의 기본적인 아이디어는 다른 권한의 프로그램에 의해 생성되고 사용되는 임시 파일에 대한 것입니다.

 

레이스 컨디션 공격에 앞서 파일 링크라는 개념이 필요한데, 이는 다른 블로그에 잘 정리되어 있으니 여기선 설명하지 않겠습니다.

구글에 리눅스 링크라고만 검색해도 많이 나옵니다.

 

레이스 컨디션 공격을 할때 값을 저장할 임의 파일을 하나 생성을 합니다. 그리고 그 임의 파일의 심볼릭 링크를 생성하여 주는데 이때 이름을 프로그램에서 생성하는 임시파일로 만듭니다. 즉 심볼릭 링크의 이름이 /tmp/level5.tmp가 되는 것이죠.

이렇게 되면 프로그램은 권한 상승이 된 상태에서 링크파일에 데이터를 덮어 씌우고, 그 값이 임의 파일에 저장되게 됩니다.

 

그러나 프로세스 연산과정의 순서로 인하여 권한 상승이 끝난뒤 접근하여 값이 변경 되지 않을 수도 있기 때문에 반복하여 될때까지 하는게 일반적입니다.

 

따라서 프로그램으로 작성하였습니다.

/usr/bin/level5를 반복적으로 실행할 func프로그램입니다.



반복적으로 /tmp/level5.tmp라는 이름의 심볼릭 링크를 생성해주는 link프로그램입니다.



값은 /home/level5/tmp/passwd파일에 저장될 것입니다.

이제 연결을 하나 더 여시고 한쪽에서는 func프로그램을 실행해주고, 다른 한쪽에서는 link프로그램을 실행하여 줍니다.

 

프로그램을 몇초정도 실행하고 ^z로 둘다 멈춘후에 /home/level5/tmp/passwd파일의 내용을 확인하면 level6의 암호가 들어가 있는것을 볼 수 있습니다.


level6의 암호는 what the hell이네요.

레이스 컨디션 공격을 막기 위해서는 먼저 프로그램 로직 중에 임시 파일을 생성한 후, 임시 파일에 접근하기 전에 임시 파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사과정을 추가해 주면 됩니다. 

 

 

크래커, 블루햇, 그레이햇은 해커를 지칭하는 용어인 것 다들 아셨나요? 코드게이트는 우리가 보다 안전한 환경에서 정보를 보안할 수 있는 환경을 연구하는 화이트해커를 양성하고 보안전문가로 거듭날 수 있도록 장려하는 세계 최고의 해킹방어대회랍니다. 해커에 대해 알아보았으니 이번엔 악성코드 및 해킹 수법 등은 어떤 것들이 있는지 한 번 알아볼까요?
 
 
*해킹 용어
 
악성코드(Malware)
‘악성코드에 감염 되었습니다.’라는 문구 많이 보셨지요. 악성코드란 사용자의 시스템에 침투해 정보를 유출하거나 파일 등을 파괴하고 방해하는 악의적인 프로그램을 총칭한답니다. 바이러스를 악성코드로 보는 경우도 있고 악성코드와 바이러스를 나누는 경우도 있는데요. 넓은 의미로 고의성을 가지고 시스템을 비정상화 시키는 프로그램들을 악성코드라 생각하시면 될 것 같습니다.
 
 
컴퓨터 바이러스(Virus)
생물학적으로 생명체에 침투하여 병을 일으키는 것처럼 컴퓨터 내에 침투하여 자료 등을 손상시키거나 프로그램 등을 파괴하는 프로그램을 바이러스라 칭합니다. 바이러스는 자체로 변형을 거쳐 다른 파일을 감염시킨다는 점에서 악성코드와 구분 하기도 합니다.
 
 
트로이목마(Trojan horse)
트로이군과 그리스군에서 사용된 목마와 유사한 매커니즘을 가진 악성코드로 겉으로는 이상이 없어 보이지만 실제로는 바이러스 등의 위험인자를 포함하고 있는 프로그램을 칭합니다.
 
 
 
 
*해킹 수법
 
스니핑(Sniffing)
스니핑은 가장 많이 사용되는 해킹 수법중의 하나입니다. ‘코를 킁킁거리다, 냄새를 맡다’란 sniff의 뜻처럼 네트워크상에 남아있는 트래픽을 엿듣는 도청행위를 말합니다. 아이디나 패스워드 같은 중요 정보를 탈취할 수 있게 될 수 있으니 데이터를 암호화하면 쉽게 스니핑을 방지할 수 있습니다.
 
 
스누핑(Snooping)
Snoop은 ‘기웃거리다’, ‘염탐하다’라는 뜻을 가진 단어로, 스니핑과 같이 도청하는 것을 의미하며, 네트워크 상에 떠도는 중요한 정보를 몰래 탈취하는 것을 뜻합니다.
 
 
스푸핑(Spoofing)
Spoof는 ‘골탕 먹이다’, ‘속이다’라는 뜻으로 스푸핑은 정상적인 것을 다른 것으로 바꿔치기(위조)하여 속이는 해킹 수법입니다. 예를 들면, 유명한 사이트의 메일을 도용하여 스팸메일을 보내 수신자로 하여금 해당 메일을 열어보게 유도하는 행위를 스푸핑이라 할 수 있습니다.
 
 
디도스(DDos)
디도스(DDos;Distrivuted Denial of Service)는 ‘분산 서비스 거부 공격’을 뜻하는데요. 지난 2009년 한국의 주요 정부기관에 디도스 공격이 가해져 친숙(?)한 단어이지요. 여러 곳에서 동시에 서비스를 공격하게 하여 표적이 되는 사이트가 패킷을 감당할 수 없게 만들어 네트워크의 성능을 저하시키거나 시스템을 마비시키는 해킹 수법입니다.
 
 
피싱(Phishing)
이메일을 통해 불법으로 불특정 다수의 개인정보를 수집하는 신종 해킹 방법입니다. 주로 금융기관을 사칭하여 고객의 개인정보와 계좌정보를 요구하는 메일을 보내거나, 위조된 웹사이트로 유도하여 개인 정보를 수집하여 악용하는 방식을 뜻합니다. 여기서 파생된 것이 국내에서 극성을 부리고 있는 보이스 피싱(Voice phishing)이랍니다.


출처 : 코드게이트(http://www.codegate.org/content/board/post_view.php?id=611)

+ Recent posts