브랜든페리
저자브랜든페리(BrandonPerry)는오픈소스.NET을구현한모노가출시된이후지속적으로C#으로프로그래밍하고있다.여가시간에는메타스플로잇프레임워크모듈작성,바이너리파일파싱이나퍼징등을즐긴다.『
WickedCoolShellScripts,2ndEdition』(NoStarchPres,2016)의공동저자다.그의웹사이트(https://volatileminds.net)에서다른소프트웨어와프로젝트도운영하고있다.
1장.C#속성과정
__IDE선택하기
__간단한예제
__클래스와인터페이스소개
____클래스생성하기
____인터페이스생성하기
____추상클래스의서브클래스화와인터페이스의구현
____Main()함수로모두합치기
____Main()함수실행하기
__익명함수
____함수에위임자할당하기
____Firefighter클래스업데이트하기
____선택가능한인자생성하기
____Main()함수업데이트하기
____업데이트된Main()함수실행하기
__네이티브라이브러리와통합하기
__결론
2장.퍼징과XSS와SQL인젝션공격
__가상환경설정하기
____호스트전용가상네트워크추가하기
____가상환경생성하기
____BadStoreISO에서가상환경으로부팅하기
__SQL인젝션
__크로스사이트스크립팅
__변형(Mutational)퓨저로퍼징GET요청하기
____파라미터변조와취약점테스트
____HTTP요청생성하기
____퍼징코드테스트
__POST요청으로퍼징하기
____POST요청퓨저작성하기
____퍼징시작하기
____퍼징파라미터
__퍼징JSON
____취약한기기설정하기71
____취약한JSON요청잡아내기
____JSON퓨저생성하기
____JSONFuzzer테스트하기
__SQL인젝션공격
____수동으로UNION기반공격수행하기
____프로그래밍을통해UNION기반공격수행하기
____부울-블라인드기반(Boolean-Blind)SQL취약점익스플로잇
__결론
3장.SOAP엔드포인트퍼징
__취약한엔드포인트설정하기
__WSDL파싱하기
____WSDL문서의클래스생성하기
____최초파싱함수작성하기
____SOAP유형과파라미터관련클래스작성하기
____송신한데이터를정의하는SoapMessage클래스생성하기
____메시지부분클래스구현하기
____SoapPortType클래스로포트작업정의하기
____포트작업을위한클래스구현하기
____SOAP바인딩에사용할프로토콜정의하기
____작업자식노드목록컴파일하기
____SOAP서비스포트찾기
__SQL인젝션취약점이있는SOAP엔드포인트퍼징자동화하기
____개별SOAP서비스퍼징
____HTTPPOSTSOAP포트퍼징하기
____SOAPXML포트퍼징하기
____퓨저실행하기
__결론
4장.재접속,바인딩작성과메타스플로잇페이로드
__역접속페이로드생성하기
____네트워크스트림
____명령어실행하기
____페이로드실행하기
__페이로드바인딩하기
____데이터수신,명령어실행과결과반환하기
____스트림에서명령어실행하기
__UDP를사용한네트워크공격
____공격대상에서실행하는코드
____공격자코드
__C#에서x86과x86-64용메타스플로잇페이로드실행하기
____메타스플로잇설정하기
____페이로드생성하기
____어셈블리코드로네이티브윈도우페이로드실행하기
____네이티브리눅스페이로드실행하기
__결론
5장.네서스자동화
__REST와네서스API
__NessusSession클래스
____HTTP요청생성하기
____로그아웃과삭제하기
____NessusSession클래스테스트하기
__NessusManager클래스
__네서스로스캔작업하기
__결론
6장.Nexpose자동화
__Nexpose설치
____활성화와테스트하기
____Nexpose용어살펴보기
__NexposeSession클래스
____ExecuteCommand()함수
____로그아웃과현재세션삭제하기
____API버전찾기
____NexposeAPI유도하기
__NexposeManager클래스
__취약점스캔작업자동화
____Asset을통해사이트생성하기
____스캔작업시작하기
__PDF로리포트생성후사이트삭제하기
__통합실행하기
____스캔작업시작하기
____리포트생성후사이트삭제하기
____자동화실행하기
__결론
7장OpenVAS자동화
__OpenVAS설치하기
__클래스생성하기
__OpenVASSession클래스
____OpenVAS서버로인증하기
____OpenVAS명령어를실행하는함수생성하기
____서버메시지읽기
____명령어를송수신하기위한TCP스트림설정하기
____인증서확인과가비지컬렉션
____OpenVAS버전가져오기
__OpenVASManager클래스
____스캔작업설정을가져와서대상생성하기
____자동화마무리하기
____자동화실행하기
____결론
8장.Cuckoo샌드박스자동화
__Cuckoo샌드박스설치하기
__Cuckoo샌드박스API수동으로실행하기
____API시작하기
____Cuckoo상태확인
__CuckooSession클래스생성
____HTTP요청을처리하는ExecuteCommand()함수작성하기
____GetMultipartFormData()함수로멀티파트HTTP데이터생성하기
____클래스를이용한파일데이터처리하기
____CuckooSession과지원클래스테스트하기
__CuckooManager클래스작성하기
____CreateTask()함수작성
____작업세부사항과보고서작성함수
____Task추상화클래스생성하기
____서로다른클래스유형처리와생성
__통합실행하기
__애플리케이션테스트하기
__결론
9장.sqlmap자동화
__sqlmap실행
____sqlmapRESTAPI
____curl을이용해sqlmapAPI테스트하기
__sqlmap의세션생성하기
____GET요청을실행하는함수생성하기
____POST요청실행하기
____세션클래스테스트하기
__SqlmapManager클래스
____sqlmap옵션목록화
____스캔작업을수행하는함수작성하기
____새로운Main()함수
__스캔작업보고하기
__전체sqlmap스캔작업자동화하기
__sqlmap을SOAP퓨저와통합하기
____sqlmap에SOAP퓨저를지원하는GET요청추가하기
____sqlmapPOST요청지원추가하기
____새로운함수호출하기
__결론
10장.ClamAV자동화
__ClamAV설치하기
__ClamAV네이티브라이브러리vs.clamd네트워크데몬
__ClamAV의네이티브라이브러리자동화하기
____지원하는옵션과클래스설정하기
____ClamAV’s네이티브라이브러리함수접근하기
____ClamAV엔진컴파일하기
____파일스캔
____삭제하기
____EICAR파일을스캔해프로그램테스트하기
__clamd자동화하기
____clamd데몬설치하기
____clamd데몬시작하기
____clamd에서세션클래스생성하기
____clamd관리자클래스생성하기
____clamd테스트
__결론
11장.메타스플로잇자동화
__RPC서버실행하기
__Metasploitable설치
__MSGPACK라이브러리가져오기
____MonoDevelop용NuGet패키지관리자설치
____MSGPACK라이브러리설치하기
____MSGPACK라이브러리참조하기
__MetasploitSession클래스작성하기
____HTTP요청을위한함수생성과MSGPACK으로활용하기
____MSGPACK에서반환데이터변형하기
__세션클래스테스트
__MetasploitManager클래스작성하기
__통합실행하기
____익스플로잇실행
____셸에서활용하기
____셸획득하기
__결론
12장.아라크니자동화
__아라크니설치
__아라크니RESTAPI
____ArachniHTTPSession클래스생성
____ArachniHTTPManager클래스생성
__Session과Manager클래스통합하기
__아라크니RPC
____수동으로RPC실행
____ArachniRPCSession클래스
____ExecuteCommand()를지원하는함수
____ExecuteCommand()함수
__ArachniRPCManager클래스
__통합실행하기
__결론
13장.관리어셈블리디컴파일과리버싱
__관리어셈블리디컴파일하기
__디컴파일러테스트
__monodis를이용한어셈블리분석
__결론
14장.오프라인에서레지스트리하이브읽기
__레지스트리하이브구조
__레지스트리하이브가져오기
__레지스트리하이브읽기
____레지스트리하이브파일을파싱하는클래스생성하기
____노드키클래스생성하기
____키값을저장하는클래스만들기
__라이브러리테스트
__부트키덤프하기
____GetBootKey()함수
____GetValueKey()함수
____GetNodeKey()함수
____StringToByteArray()함수
____부트키가져오기
____부트키검증하기
__결론
★이책에서다루는내용★
■HTTP와XML라이브러리를이용해SQL과XSS인젝션을스캔하는퓨저작성
■메타스플로잇에서플랫폼과아키텍처에독립적인페이로드를생성하는셸코드작성
■네서스,OpenVAS,sqlmap을자동화해취약점을스캔하고SQL인젝션익스플로잇수행
■OSX와리눅스용.NET디컴파일러작성
■시스템정보를덤프하는오프라인레지스트리하이브파싱도구작성
■MSGPACKRPC를이용해아라크니와메타스플로잇보안도구자동화
★이책의대상독자★
네트워크엔지니어나애플리케이션보안엔지니어같이보안중심의작업을하는이들은취약점스캔이나악성코드분석을위해어느정도자동화에의존한다.여러보안전문가는다양한운영체제를선호하기때문에모든사람이쉽게실행할수있는도구를작성하는일은까다로울수있다.모노는플랫폼간호환성이뛰어나고보안전문가의업무를자동화를도와주는훌륭한핵심라이브러리를보유하고있으므로좋은선택이될수있다.공격익스플로잇작성,인프라취약점검색자동화,다른.NET애플리케이션디컴파일이나오프라인레지스트리하이브파일읽기,다양한플랫폼을지원하는페이로드작성방법에관심이있다면이책에서다루는많은주제가좋은시작점이될것이다(C#배경지식이없어도좋다).
★이책의구성★
1장,‘C#속성과정’에서는간단한예제를사용해C#객체지향프로그래밍의기초와다양한C#기능을다룬다.HelloWorld프로그램으로시작해객체지향프로그래밍의이해를돕기위한소규모클래스를작성한다.그후익명함수와P/Invoke같은고급C#기능을다룬다.
2장,‘퍼징과XSS과SQL인젝션공격’에서는HTTP라이브러리를사용해웹서버와통신하고다양한데이터유형으로XSS과SQL인젝션을찾아내는작은HTTP요청퓨저를작성한다.
3장,‘SOAP엔드포인트퍼징’에서는HTTPWSDL을자동으로생성해잠재적인SQL인젝션공격가능성을찾기위해SOAPWSDL을검색하고파싱하는또하나의작은퓨저를작성해본다.이는이전장의퓨저개념을이해한다음단계로볼수있다.표준라이브러리에서제공하는XML라이브러리도살펴본다.
4장,‘재접속,바인딩과메타스플로잇페이로드’에서는HTTP에중점을두고페이로드작성에관해설명한다.먼저간단한페이로드2개를제작하는데,하나는TCP,다른하나는UDP를통해생성한다.그런다음,메타스플로잇에서x86/x86_64셸코드를생성하고여러플랫폼과아키텍처에서사용할수있는페이로드를생성하는방법을학습한다.
5장,‘네서스자동화’에서는취약점스캐너중가장뛰어난네서스(Nessus)를자동화하기위해HTTP를다시다룬다.CIDR범위를프로그램화하고작성해스캔하고보고하는방법에관해설명한다.
6장,‘Nexpose자동화’에서는Nexpose취약점스캐너를이용한도구자동화에초점을맞춘다.Nexpose는HTTP를기반의API를사용해취약점검사와보고서작성을자동화한다.Nexpose의제작자인Rapid7은커뮤니티제품에대한1년무료라이선스를제공하며개인용으로매우유용하다.
7장,‘OpenVAS자동화’에서는오픈소스인OpenVAS를사용해취약점스캐너자동화에초점을맞춘다.OpenVAS는네서스와Nexpose와는근본적으로다른종류의API를사용하며,통신프로토콜에TCP소켓과XML만사용한다.또한무료이기때문에취약점을검색할때더많은경험을쌓을수있다.
8장,‘Cuckoo샌드박스자동화’에서는Cuckoo샌드박스를사용한디지털포렌식(digitalforensic)을다룬다.사용하기쉬운RESTJSONAPI를사용해잠재적인악성코드를제출하고결과보고를자동화한다.
9장,‘sqlmap자동화’에서는sqlmap을자동화해SQL인젝션을최대한활용해공격한다.먼저sqlmap과함께제공하는사용하기쉬운JSONAPI로하나의URL을제출하는간단한도구를제작한다.sqlmap에익숙해지면3장에서다룬SOAPWSDL퓨저로스크립트를통합해잠재적인SQL인젝션취약점을자동으로공격하고입증할수있다.
10장,‘ClamAV자동화’에서는기존비관리라이브러리와의상호작용에중점을둔다.널리사용되는오픈소스안티바이러스프로젝트인ClamAV는.NET언어로작성돼있지않지만,원격라이브러리를사용할수있는TCP데몬및핵심라이브러리와여전히인터페이스할수있다.이두가지시나리오에서ClamAV를자동화하는방법을다룬다.
11장,‘메타스플로잇자동화’에서는다시메타스플로잇으로돌아가코어프레임워크와함께제공되는MSGPACKRPC를통해프로그램화하고공격해셸을얻은호스트를보고하는방법에관해학습한다.
12장,‘아라크니자동화’에서는이중라이선스이긴하지만무료이자오픈소스프로젝트인아라크니(Arachni)라는블랙박스웹애플리케이션스캐너자동화에초점을맞춘다.간단한RESTHTTPAPI와프로젝트와함께제공하며,좀더강력한MSGPACKRPC를통해URL을스캔한결과를자동으로보고하는간단한도구를생성한다.
13장,‘관리어셈블리의디컴파일과리버싱’에서는리버스엔지니어링에관해설명한다.윈도우용.NET디컴파일러는사용하기쉽지만,맥이나리눅스용은쉽지않으므로직접간단한디컴파일러를작성한다.
14장,‘오프라인에서레지스트리하이브읽기’에서는사고대응으로넘어가윈도우레지스트리의바이너리구조체를알아보고레지스트리하이브에초점을맞춘다.
오프라인에서레지스트리하이브를파싱하고읽는방법을통해레지스트리에저장된패스워드해시를암호화하는데사용한시스템의부트키(bootkey)를얻을수있다.
★옮긴이의말★
이책을출간하는시점에도스펙터(Spectre)나멜트다운(Meltdown)과같은새로운공격방식이등장하며보안이슈는끊임없이사회전반에회자되고있다.일정규모이상의조직에서는아웃소싱여부에상관없이IT리스크관리를하기시작했고,그중하나가침투테스트라는형태로사용중인자산이잘보호되고있는지보안전문가들로하여금실제악의적인공격자를가장해해킹을시도해보는점검방식이다.하지만침투테스터입장에서는가능한한다수의취약점을발견하고실제취약점이공격으로이어질가능성을평가해야한다.또한조치후문제가사라졌는지재검검도필요하며,실제서비스에영향을주지않고주기적으로점검할수있다면더욱이상적이다.
하지만사실이러한반복적인작업은중요하지만따분해지기쉽다.
따라서보안전문가나침투테스터가자주사용하는여러보안도구를활용해업무를체계적으로자동화하는방법을도입해야한다.이를위해저자는플랫폼에독립적인C#이라는언어를택했다.C#에익숙하지않은독자를위해1장에서간단히C#언어에대한속성과정을제공한다.객체지향언어를다뤄본경험이있다면어렵지않게이해할수있을것이다.나머지장에서는웹애플리케이션의대표적인취약점XSS와SQL인젝션퍼징,악성코드분석에사용하는쿠쿠샌드박스와ClamAV,다양한익스플로잇을제공하는메타스플로잇과연동하는법등실전에사용할수있는다양한자동화방법을설명한다.
본인에게필요한맞춤형자동화도구를개발할때책에나온코드를참고한다면좋은지침서로활용할수있으리라믿는다.나아가자신만의자동화도구를제작해서오픈소스로공개한다면더욱의미가있을않을까.