이미 소장하고 있다면 판매해 보세요.
|
|
1장. C# 속성 과정
__IDE 선택하기 __간단한 예제 __클래스와 인터페이스 소개 ____클래스 생성하기 ____인터페이스 생성하기 ____추상 클래스의 서브 클래스화와 인터페이스의 구현 ____Main( ) 함수로 모두 합치기 ____Main( ) 함수 실행하기 __익명 함수 ____함수에 위임자 할당하기 ____Firefighter 클래스 업데이트하기 ____선택 가능한 인자 생성하기 ____Main( ) 함수 업데이트하기 ____업데이트된 Main( ) 함수 실행하기 __네이티브 라이브러리와 통합하기 __결론 2장. 퍼징과 XSS와 SQL 인젝션 공격 __가상 환경 설정하기 ____호스트 전용 가상 네트워크 추가하기 ____가상 환경 생성하기 ____BadStore ISO에서 가상 환경으로 부팅하기 __SQL 인젝션 __크로스 사이트 스크립팅 __변형(Mutational) 퓨저로 퍼징 GET 요청하기 ____파라미터 변조와 취약점 테스트 ____HTTP 요청 생성하기 ____퍼징 코드 테스트 __POST 요청으로 퍼징하기 ____POST 요청 퓨저 작성하기 ____퍼징 시작하기 ____퍼징 파라미터 __퍼징 JSON ____취약한 기기 설정하기71 ____취약한 JSON 요청 잡아내기 ____JSON 퓨저 생성하기 ____JSON Fuzzer 테스트하기 __SQL 인젝션 공격 ____수동으로 UNION 기반 공격 수행하기 ____프로그래밍을 통해 UNION 기반 공격 수행하기 ____부울-블라인드 기반(Boolean-Blind) SQL 취약점 익스플로잇 __결론 3장. SOAP 엔드포인트 퍼징 __취약한 엔드포인트 설정하기 __WSDL 파싱하기 ____WSDL 문서의 클래스 생성하기 ____최초 파싱 함수 작성하기 ____SOAP 유형과 파라미터 관련 클래스 작성하기 ____송신한 데이터를 정의하는 SoapMessage 클래스 생성하기 ____메시지 부분 클래스 구현하기 ____SoapPortType 클래스로 포트 작업 정의하기 ____포트 작업을 위한 클래스 구현하기 ____SOAP 바인딩에 사용할 프로토콜 정의하기 ____작업 자식 노드 목록 컴파일하기 ____SOAP 서비스 포트 찾기 __SQL 인젝션 취약점이 있는 SOAP 엔드포인트 퍼징 자동화하기 ____개별 SOAP 서비스 퍼징 ____HTTP POST SOAP 포트 퍼징하기 ____SOAP XML 포트 퍼징하기 ____퓨저 실행하기 __결론 4장. 재접속, 바인딩 작성과 메타스플로잇 페이로드 __역접속 페이로드 생성하기 ____네트워크 스트림 ____명령어 실행하기 ____페이로드 실행하기 __페이로드 바인딩하기 ____데이터 수신, 명령어 실행과 결과 반환하기 ____스트림에서 명령어 실행하기 __UDP를 사용한 네트워크 공격 ____공격 대상에서 실행하는 코드 ____공격자 코드 __C#에서 x86과 x86-64용 메타스플로잇 페이로드 실행하기 ____메타스플로잇 설정하기 ____페이로드 생성하기 ____어셈블리 코드로 네이티브 윈도우 페이로드 실행하기 ____네이티브 리눅스 페이로드 실행하기 __결론 5장. 네서스 자동화 __REST와 네서스 API __NessusSession 클래스 ____HTTP 요청 생성하기 ____로그아웃과 삭제하기 ____NessusSession 클래스 테스트하기 __NessusManager 클래스 __네서스로 스캔 작업하기 __결론 6장. Nexpose 자동화 __Nexpose 설치 ____활성화와 테스트하기 ____Nexpose 용어 살펴보기 __NexposeSession 클래스 ____ExecuteCommand( ) 함수 ____로그아웃과 현재 세션 삭제하기 ____API 버전 찾기 ____Nexpose API 유도하기 __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 실행 ____sqlmap REST API ____curl을 이용해 sqlmap API 테스트하기 __sqlmap의 세션 생성하기 ____GET 요청을 실행하는 함수 생성하기 ____POST 요청 실행하기 ____세션 클래스 테스트하기 __SqlmapManager 클래스 ____sqlmap 옵션 목록화 ____스캔 작업을 수행하는 함수 작성하기 ____새로운 Main( ) 함수 __스캔 작업 보고하기 __전체 sqlmap 스캔 작업 자동화하기 __sqlmap을 SOAP 퓨저와 통합하기 ____sqlmap에 SOAP 퓨저를 지원하는 GET 요청 추가하기 ____sqlmap POST 요청 지원 추가하기 ____새로운 함수 호출하기 __결론 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장. 아라크니 자동화 __아라크니 설치 __아라크니 REST API ____ArachniHTTPSession 클래스 생성 ____ArachniHTTPManager 클래스 생성 __Session과 Manager 클래스 통합하기 __아라크니 RPC ____수동으로 RPC 실행 ____ArachniRPCSession 클래스 ____ExecuteCommand( )를 지원하는 함수 ____ExecuteCommand( ) 함수 __ArachniRPCManager 클래스 __통합 실행하기 __결론 13장. 관리 어셈블리 디컴파일과 리버싱 __관리 어셈블리 디컴파일하기 __디컴파일러 테스트 __monodis를 이용한 어셈블리 분석 __결론 14장. 오프라인에서 레지스트리 하이브 읽기 __레지스트리 하이브 구조 __레지스트리 하이브 가져오기 __레지스트리 하이브 읽기 ____레지스트리 하이브 파일을 파싱하는 클래스 생성하기 ____노드 키 클래스 생성하기 ____키 값을 저장하는 클래스 만들기 __라이브러리 테스트 __부트 키 덤프하기 ____GetBootKey( ) 함수 ____GetValueKey( ) 함수 ____GetNodeKey( ) 함수 ____StringToByteArray( ) 함수 ____부트 키 가져오기 ____부트 키 검증하기 __결론 |
Brandon Perry
|
이 책에서 다루는 내용
*HTTP와 XML 라이브러리를 이용해 SQL과 XSS 인젝션을 스캔하는 퓨저 작성 *메타스플로잇에서 플랫폼과 아키텍처에 독립적인 페이로드를 생성하는 셸 코드 작성 *네서스, OpenVAS, sqlmap을 자동화해 취약점을 스캔하고 SQL 인젝션 익스플로잇 수행 *OS X와 리눅스용 .NET 디컴파일러 작성 *시스템 정보를 덤프하는 오프라인 레지스트리 하이브 파싱 도구 작성 *MSGPACK RPC를 이용해 아라크니와 메타스플로잇 보안 도구 자동화 이 책의 대상 독자 네트워크 엔지니어나 애플리케이션 보안 엔지니어 같이 보안 중심의 작업을 하는 이들은 취약점 스캔이나 악성코드 분석을 위해 어느 정도 자동화에 의존한다. 여러 보안 전문가는 다양한 운영 체제를 선호하기 때문에 모든 사람이 쉽게 실행할 수 있는 도구를 작성하는 일은 까다로울 수 있다. 모노는 플랫폼 간 호환성이 뛰어나고 보안 전문가의 업무를 자동화를 도와주는 훌륭한 핵심 라이브러리를 보유하고 있으므로 좋은 선택이 될 수 있다. 공격 익스플로잇 작성, 인프라 취약점 검색 자동화, 다른 .NET 애플리케이션 디컴파일이나 오프라인 레지스트리 하이브 파일 읽기, 다양한 플랫폼을 지원하는 페이로드 작성 방법에 관심이 있다면 이 책에서 다루는 많은 주제가 좋은 시작점이 될 것이다(C# 배경 지식이 없어도 좋다). 이 책의 구성 1장, ‘C# 속성 과정’에서는 간단한 예제를 사용해 C# 객체지향 프로그래밍의 기초와 다양한 C# 기능을 다룬다. Hello World 프로그램으로 시작해 객체지향 프로그래밍의 이해를 돕기 위한 소규모 클래스를 작성한다. 그 후 익명 함수와 P/Invoke 같은 고급 C# 기능을 다룬다. 2장, ‘퍼징과 XSS과 SQL 인젝션 공격’에서는 HTTP 라이브러리를 사용해 웹 서버와 통신하고 다양한 데이터 유형으로 XSS과 SQL 인젝션을 찾아내는 작은 HTTP 요청 퓨저를 작성한다. 3장, ‘SOAP 엔드포인트 퍼징’에서는 HTTP WSDL을 자동으로 생성해 잠재적인 SQL 인젝션 공격 가능성을 찾기 위해 SOAP WSDL을 검색하고 파싱하는 또 하나의 작은 퓨저를 작성해본다. 이는 이전 장의 퓨저 개념을 이해한 다음 단계로 볼 수 있다. 표준 라이브러리에서 제공하는 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 샌드박스를 사용한 디지털 포렌식(digital forensic)을 다룬다. 사용하기 쉬운 REST JSON API를 사용해 잠재적인 악성코드를 제출하고 결과 보고를 자동화한다. 9장, ‘sqlmap 자동화’에서는 sqlmap을 자동화해 SQL 인젝션을 최대한 활용해 공격한다. 먼저 sqlmap과 함께 제공하는 사용하기 쉬운 JSON API로 하나의 URL을 제출하는 간단한 도구를 제작한다. sqlmap에 익숙해지면 3장에서 다룬 SOAPWSDL 퓨저로 스크립트를 통합해 잠재적인 SQL 인젝션 취약점을 자동으로 공격하고 입증할 수 있다. 10장, ‘ClamAV 자동화’에서는 기존 비관리 라이브러리와의 상호작용에 중점을 둔다. 널리 사용되는 오픈소스 안티 바이러스 프로젝트인 ClamAV는 .NET 언어로 작성돼 있지 않지만, 원격 라이브러리를 사용할 수 있는 TCP 데몬 및 핵심 라이브러리와 여전히 인터페이스할 수 있다. 이 두 가지 시나리오에서 ClamAV를 자동화하는 방법을 다룬다. 11장, ‘메타스플로잇 자동화’에서는 다시 메타스플로잇으로 돌아가 코어 프레임워크와 함께 제공되는 MSGPACK RPC를 통해 프로그램화하고 공격해 셸을 얻은 호스트를 보고하는 방법에 관해 학습한다. 12장, ‘아라크니 자동화’에서는 이중 라이선스이긴 하지만 무료이자 오픈소스 프로젝트인 아라크니(Arachni)라는 블랙박스 웹 애플리케이션 스캐너 자동화에 초점을 맞춘다. 간단한 REST HTTP API와 프로젝트와 함께 제공하며, 좀 더 강력한 MSGPACK RPC를 통해 URL을 스캔한 결과를 자동으로 보고하는 간단한 도구를 생성한다. 13장, ‘관리 어셈블리의 디컴파일과 리버싱’에서는 리버스 엔지니어링에 관해 설명한다. 윈도우용 .NET 디컴파일러는 사용하기 쉽지만, 맥이나 리눅스용은 쉽지 않으므로 직접 간단한 디컴파일러를 작성한다. 14장, ‘오프라인에서 레지스트리 하이브 읽기’에서는 사고 대응으로 넘어가 윈도우 레지스트리의 바이너리 구조체를 알아보고 레지스트리 하이브에 초점을 맞춘다. 오프라인에서 레지스트리 하이브를 파싱하고 읽는 방법을 통해 레지스트리에 저장된 패스워드 해시를 암호화하는 데 사용한 시스템의 부트키(boot key)를 얻을 수 있다. 지은이의 말 C#은 항상 .NET 언어의 공통어로 자리매김해왔다. 이 책에서 볼 수 있듯이 C#은 진입 장벽이 낮고 대규모 개발자 커뮤니티가 있으므로 쉽게 시작할 수 있다. 또한 .NET은 관리 코드이자 풍부한 타입을 지원하는 언어며, 컴파일한 어셈블리를 C#으로 쉽게 디컴파일할 수 있다. 따라서 공격자의 입장에서 C#으로 프로그램을 작성한다면 기능을 새로 개발할 필요가 없다. 오히려 다양한 .NET 악성코드 샘플을 가져와 디컴파일하고, 소스에 해당하는 코드를 읽고, 필요한 기능을 “빌려올” 수도 있다. 더 나아가 충분한 리버싱을 통해 악성코드의 파괴적인 행위를 피할 수 있다고 가정하면, .NET 리플렉션 API(.NET reflection API)를 사용해 기존 .NET 악성코드 샘플을 동적으로 로드하고 실행할 수 있다. C# 학습 동기는 각기 다르다. 필자의 경우, 파워셸 기법을 .NET 코드로 더 많은 플랫폼으로 신속히 전환하기 위함이다. 독자는 기존 C# 기술에 더해 공격자의 공격 방식을 습득할 수 있는 수단으로 이 책을 읽어도 좋다. 이와 반대로 공격자의 공격 방식을 여러 플랫폼에서 사용하는 다른 언어에 적용할 수도 있다. 동기와 상관없이 공격적이고 방어적인 관점에서 C#으로 개발하고 싶다면, 저자의 독특한 경험과 지혜를 전수받을 준비를 하자. 옮긴이의 말 이 책을 출간하는 시점에도 스펙터(Spectre)나 멜트다운(Meltdown)과 같은 새로운 공격 방식이 등장하며 보안 이슈는 끊임없이 사회 전반에 회자되고 있다. 일정 규모 이상의 조직에서는 아웃소싱 여부에 상관없이 IT 리스크 관리를 하기 시작했고, 그 중 하나가 침투 테스트라는 형태로 사용 중인 자산이 잘 보호되고 있는지 보안 전문가들로 하여금 실제 악의적인 공격자를 가장해 해킹을 시도해 보는 점검 방식이다. 하지만 침투 테스터 입장에서는 가능한 한 다수의 취약점을 발견하고 실제 취약점이 공격으로 이어질 가능성을 평가해야 한다. 또한 조치 후 문제가 사라졌는지 재검검도 필요하며, 실제 서비스에 영향을 주지 않고 주기적으로 점검할 수 있다면 더욱 이상적이다. 하지만 사실 이러한 반복적인 작업은 중요하지만 따분해지기 쉽다. 따라서 보안 전문가나 침투 테스터가 자주 사용하는 여러 보안 도구를 활용해 업무를 체계적으로 자동화하는 방법을 도입해야 한다. 이를 위해 저자는 플랫폼에 독립적인 C#이라는 언어를 택했다. C#에 익숙하지 않은 독자를 위해 1장에서 간단히 C# 언어에 대한 속성 과정을 제공한다. 객체지향 언어를 다뤄본 경험이 있다면 어렵지 않게 이해할 수 있을 것이다. 나머지 장에서는 웹 애플리케이션의 대표적인 취약점 XSS와 SQL 인젝션 퍼징, 악성코드 분석에 사용하는 쿠쿠 샌드박스와 ClamAV, 다양한 익스플로잇을 제공하는 메타스플로잇과 연동하는 법 등 실전에 사용할 수 있는 다양한 자동화 방법을 설명한다. 본인에게 필요한 맞춤형 자동화 도구를 개발할 때 책에 나온 코드를 참고한다면 좋은 지침서로 활용할 수 있으리라 믿는다. 나아가 자신만의 자동화 도구를 제작해서 오픈소스로 공개한다면 더욱 의미가 있을 않을까. |