Top

그레이햇 C# [C#을 활용한 해커의 보안 도구 제작과 자동화 가이드]

  • 원서명Gray Hat C#: A Hacker's Guide to Creating and Automating Security Tools (ISBN 9781593277598)
  • 지은이브랜든 페리(Brandon Perry)
  • 옮긴이구형준
  • ISBN : 9791161751184
  • 30,000원
  • 2018년 02월 12일 펴냄
  • 페이퍼백 | 412쪽 | 188*235mm
  • 시리즈 : 해킹과 보안

책 소개

요약

보안 전문가나 침투 테스터가 자주 사용하는 다양한 보안 도구를 활용해 업무를 자동화하는 법을 알려준다. 책에 소개된 다양한 도구는 보안 전문가와 침투 테스터가 자주 활용하는 보안 툴이다.
플랫폼에 독립적인 C# 언어로 저자가 직접 작성한 코드를 통해 보안 도구와 연동하는 법을 자세히 알려주며, 이를 기반으로 자신만의 맞춤형 도구를 개발할 수 있는 좋은 지침서로 활용할 수 있다.

이 책에서 다루는 내용

■ 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#으로 개발하고 싶다면, 저자의 독특한 경험과 지혜를 전수받을 준비를 하자.

지은이 소개

브랜든 페리(Brandon Perry)

오픈소스 .NET을 구현한 모노가 출시된 이후 지속적으로 C#으로 프로그래밍하고 있다. 여가 시간에는 메타스플로잇 프레임워크 모듈 작성, 바이너리 파일 파싱이나 퍼징 등을 즐긴다. 『Wicked Cool Shell Scripts, 2nd Edition』(No Starch Pres, 2016)의 공동 저자다. 그의 웹 사이트(https://volatileminds.net)에서 다른 소프트웨어와 프로젝트도 운영하고 있다.

옮긴이의 말

이 책을 출간하는 시점에도 스펙터(Spectre)나 멜트다운(Meltdown)과 같은 새로운 공격 방식이 등장하며 보안 이슈는 끊임없이 사회 전반에 회자되고 있다. 일정 규모 이상의 조직에서는 아웃소싱 여부에 상관없이 IT 리스크 관리를 하기 시작했고, 그 중 하나가 침투 테스트라는 형태로 사용 중인 자산이 잘 보호되고 있는지 보안 전문가들로 하여금 실제 악의적인 공격자를 가장해 해킹을 시도해 보는 점검 방식이다. 하지만 침투 테스터 입장에서는 가능한 한 다수의 취약점을 발견하고 실제 취약점이 공격으로 이어질 가능성을 평가해야 한다. 또한 조치 후 문제가 사라졌는지 재검검도 필요하며, 실제 서비스에 영향을 주지 않고 주기적으로 점검할 수 있다면 더욱 이상적이다.
하지만 사실 이러한 반복적인 작업은 중요하지만 따분해지기 쉽다.
따라서 보안 전문가나 침투 테스터가 자주 사용하는 여러 보안 도구를 활용해 업무를 체계적으로 자동화하는 방법을 도입해야 한다. 이를 위해 저자는 플랫폼에 독립적인 C#이라는 언어를 택했다. C#에 익숙하지 않은 독자를 위해 1장에서 간단히 C# 언어에 대한 속성 과정을 제공한다. 객체지향 언어를 다뤄본 경험이 있다면 어렵지 않게 이해할 수 있을 것이다. 나머지 장에서는 웹 애플리케이션의 대표적인 취약점 XSS와 SQL 인젝션 퍼징, 악성코드 분석에 사용하는 쿠쿠 샌드박스와 ClamAV, 다양한 익스플로잇을 제공하는 메타스플로잇과 연동하는 법 등 실전에 사용할 수 있는 다양한 자동화 방법을 설명한다.
본인에게 필요한 맞춤형 자동화 도구를 개발할 때 책에 나온 코드를 참고한다면 좋은 지침서로 활용할 수 있으리라 믿는다. 나아가 자신만의 자동화 도구를 제작해서 오픈소스로 공개한다면 더욱 의미가 있을 않을까.

옮긴이 소개

구형준

대기업과 금융 IT 환경에서 보안 프로세스 개선, 서비스 보안 리뷰, 보안 점검, 보안 솔루션 검토, 보안 교육 등 다양한 경험을 쌓았다. 고려대학교 정보보호대학원에서 디지털 포렌식을 전공했고 현재 뉴욕 주립대에서 컴퓨터 사이언스 박사 과정을 밟고 있다. 악성코드, 프라이버시, 바이너리 분석과 메모리 보호기법 등의 분야에 관심을 가지고 있다.

목차

목차
  • 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( ) 함수
      • 부트 키 가져오기
      • 부트 키 검증하기

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p27 아래서 2행]
http://www.acornpub.co.kr/book/book/gray-hat-csharp
->
http://www.acornpub.co.kr/book/gray-hat-csharp