
리눅스 방화벽 [오픈소스를 활용한 철통 같은 보안]
- 원서명Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort (ISBN 9781593271411)
- 지은이마이클 래쉬
- 옮긴이민병호
- ISBN : 9788960770577
- 30,000원
- 2008년 09월 12일 펴냄 (절판)
- 페이퍼백 | 384쪽 | 188*250mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
해커 침입을 적시에 탐지하고 완벽히 차단하기 위해, iptables, psad, fwsnort를 이용한 철통 같은 방화벽 구축과 보안에 필요한 모든 내용을 상세하고 흥미롭게 다룬 리눅스 시스템 관리자의 필독서!
시스템 관리자는 자신이 관리하는 네트워크에 매일 노출되는 새로운 보안 취약점을 미리 대비해야 한다. 방화벽과 침입 탐지 시스템(IDS)은 접근을 사전에 막고 공격으로 보이는 네트워크 트래픽을 감시할 수 있게 해주는 중요한 도구다.
『리눅스 방화벽: 오픈소스를 활용한 철통 같은 보안』에서는 리눅스 커널에 내장되는 iptables 방화벽과 넷필터 프레임워크의 기술적인 면을 상세히 다루며, 상용 도구에 필적하는 강력한 필터링, 네트워크 주소 변환(NAT), 상태 추적, 애플리케이션 계층 검사 기능을 어떻게 제공하는지 알려준다. psad와 fwsnort를 함께 사용해서 iptables를 IDS로 배치하는 방법과 fwknop를 통해 iptables 위에 강력한 수동적 인증 계층을 생성하는 방법도 알려준다.
[ 소개 ]
날이 갈수록 공격이 우위를 점하는 것처럼 보인다. 거의 매일 소프트웨어 취약점에 대한 새로운 공격 방법, 좀 더 효과적인 스팸 전송 방법(필자의 받은 편지함이 이를 증명해준다), 또는 세간의 이목을 끄는 회사나 정부 조직의 민감한 개인 데이터 도난에 대한 뉴스가 등장한다. 안전한 컴퓨팅을 달성하는 것은 영원한 난제다. 악질적인 해커들을 무력화하게 설계된 기술에는 부족함이 없지만 해커들은 계속해서 시스템과 네트워크에 침투하고 있다.
모든 종류의 보안 문제점에 대해서 거의 대부분의 경우 이에 대응하게 설계된 공개 소스 솔루션이나 상용 솔루션이 존재한다. 이는 특히 방화벽, 필터링 라우터 등과 같은 네트워크 침입 탐지 시스템과 네트워크 접근 제어 장치 분야에서 그렇다. 방화벽 기술의 경향은 침입 탐지 분야의 애플리케이션 계층 검사 기술을 방화벽이 오랜 기간 해왔던 네트워크 트래픽 필터링과 결합하는 것이다. 이 책의 목표는 리눅스 시스템의 iptables 방화벽이 방화벽 분야의 이런 경향을 반영하기에 적합하다는 것, 특히 iptables가 침입 탐지의 관점에서 iptables를 강화하게 설계된 추가적인 소프트웨어와 결합할 때 더욱 적합하다는 것을 보이는 것이다.
필자는 현존하는 출간물 중 이 책이 몇 가지 면에서 유일하다고 생각한다. 리눅스 방화벽의 다양한 면을 논한 훌륭한 책은 많지만 필자가 아는 한 그 어떤 책도 iptables와 이것이 제공하는 데이터를 통해 탐지할 수 있는(그리고 어떤 경우에는 저지할 수 있는) 공격을 중점적으로 다루지는 않는다. 침입 탐지를 다룬 책도 많지만 침입 탐지 과정을 진정으로 보충하기 위해 방화벽 기술을 사용하는 데 초점을 둔 책은 없다. 이 책은 앞서 언급한 두 기술의 융합을 다룬다.
이 책에서는 공격 탐지와 방지에 대한 iptables의 유효성을 극대화하게 설계된 다음의 세 가지 공개 소스 소프트웨어 프로젝트를 자세히 살펴본다.
psad - iptables 로그 분석기와 능동적 응답 도구(active response tool)
fwsnort - 스노트(Snort) 규칙을 등가의 iptables 규칙으로 변환하는 스크립트
fwknop - iptables에 대한 단일 패킷 권한 부여(SPA, Single Packet Authorization)의 구현
이들은 모두 GNU 공개 라이선스(GPL) 하에서 공개 소스 소프트웨어로서 배포되며, http://www.cipherdyne.org에서 받을 수 있다.
[ 이 책에서 다루는 내용 ]
구체적인 예를 통해 방화벽 로그 분석과 정책, 수동적 네트워크 인증과 권한 부여, 공격 패킷 추적, 스노트 규칙 집합 에뮬레이션 등과 같은 개념을 확실히 알 수 있다. 이 책의 예제에서는 다음과 같은 내용을 다룬다.
• iptables 문자열 매칭 확장과 fwsnort를 사용한 애플리케이션 계층 공격 탐지
• 스노트 규칙 집합을 에뮬레이션하는 iptables 규칙 집합 생성
• 포트 노킹과 단일 패킷 권한 부여(SPA)
• iptables 로그를 시각화하기 위한 도구
• iptables를 이용한 수동적 OS 핑거프린팅
펄과 C 코드를 통해 리눅스 방화벽의 배치를 최적화할 수 있는 실질적인 예를 볼 수 있다.
네트워크를 안전하게 보호할 책임을 지고 있는 사람이라면 공격을 이해하는 데나 침투를 탐지하고 막기 위해 (psad나 fwsnort와 함께) iptables를 사용하는 데 『리눅스 방화벽』이 큰 도움될 것이다.
[ 추천의 글 ]
사람들은 대부분 방화벽(firewall)이라는 용어를 들으면 OSI 참조 모델의 네트워크 계층과 전송 계층에서 네트워크 트래픽을 검사하면서 통과나 필터링을 결정하는 제품을 떠올린다. 제품 측면에서 보면 방화벽에는 십여 개의 유형이 있다. 방화벽의 유형은 검사하는 데이터(예를 들어 네트워크 트래픽, 호스트 프로세스, 시스템 호출)와 이러한 데이터를 검사하는 깊이에 따라 구별된다. 통신을 검사하고 통과시킬지 필터링할지 결정하는 거의 모든 장치가 방화벽 제품이다.
프록시 방화벽의 발명가이자 최초의 상용 방화벽 제품의 구현자인 마커스 래넘(Marcus Ranum)은 1990년대 중반에 방화벽이라는 용어를 다음과 같이 정의했다. “방화벽은 인터넷 보안 정책의 구현이다. 이 정의는 제품 중립적이고 특정 시간에 한정되지 않으며 현실적이기 때문에 매우 훌륭하다. 이 정의는 지금 읽고 있는 이 책뿐만 아니라 윌리엄 체스윅과 스티븐 벨로빈이 쓴 최초의 방화벽 관련 서적인 『방화벽과 인터넷 보안(Addison-Wesley Professional, 1994)』에도 똑같이 적용된다.
래넘의 정의에 따르면 방화벽은 정책 강제 시스템(policy enforcement system)으로 생각할 수도 있다. 네트워크 트래픽을 검사한 후 이를 통과시키거나 필터링하는 장치를 네트워크 정책 강제 시스템이라고 하며 호스트-중심 활동을 검사한 후 이를 통과시키거나 필터링하는 장치를 호스트 정책 강제 시스템이라고 한다. 어떤 경우든 정책 강제를 중점적으로 생각해보면 방화벽의 역할이 단순히 “나쁜 것을 막는” 장치가 아니라 정책을 구현하는 장치라는 것을 알 수 있다.
“나쁜 것”과 관련해서 방화벽이 오늘날의 기업에도 여전히 중요한지 의문을 가질 수 있다. 적절히 설정한 전통적인 네트워크 방화벽 제품은 기본적으로 허용된 인터넷 프로토콜, IP 주소, TCP/UDP 포트, ICMP 유형과 코드를 제외한 모든 것을 차단한다. 요즘의 공격 환경에서 이런 종류의 방어로는 불충분하다. 이러한 공격 채널을 제한하는 것은 목표로의 입구와 출구 경로를 제한하기 위해 필요하지만 네트워크와 전송 계층 필터링은 최소한 지난 10년간 전혀 충분치 못한 대책이었다.
2007년 현재 클라이언트에 침투하는 가장 효과적인 방법은 사용자가 악의적인 실행 파일을 활성화하게 유도하거나 사용자에게 악의적인 콘텐트를 호스팅하는 링크를 전송하는 것, 또는 사용자 컴퓨팅 경험의 다른 클라이언트 측 컴포넌트를 공격하는 것이다. 많은 경우 공격은 패치(patch)할 수 있는 취약점이나 강화할 수 있는 설정에 의존하지 않는다. 대신 공격자는 오늘날 웹을 탐색하는 데 점점 더 필요해지고 있는 자바스크립트나 플래시 같은 리치미디어(rich-media) 플랫폼의 약점을 공격한다.
2007년 현재 서버에 침투하는 가장 효과적인 방법은 운영체제를 피해 애플리케이션을 공격하는 것이다. 웹 애플리케이션이 서버 분야를 지배하고 있으며, 웹 애플리케이션의 문제점은 패치할 수 있는 취약점보다 구조적 결함이나 설계 결함에 있다. 1990년대 후반에는 안전하지 않은 웹 애플리케이션임을 보이기 위해 장바구니 항목의 가격을 변경하는 것이 유행이었다. Ajax의 덕분에 거의 10년 후인 지금 장바구니는 클라이언트에서 동작하고 있으며 사용자들은 또 다시 가격을 변경하고 있다(이는 더욱 안 좋은 것이다).
앞서 설명한 모든 것으로 인해 방화벽 제품의 미래가 어두워진 듯 보인다. 많은 방화벽이 상세한 패킷 검사를 포함하거나 OSI 참조 모델의 애플리케이션 계층이나 그보다 상위 계층에서 동작함으로써 변화에 적응해왔다. 다른 방화벽들은 필수품화된 것처럼 보이는 시장에서 자신을 차별화하기 위해 영리한 마케팅 용어를 사용하면서 침입방지시스템(intrusionpreventionsystem)으로서 동작한다. 클라이언트 측 공격과 웹 애플리케이션 공격의 시대에 방화벽, 특히 공개 소스 제품이 설 자리가 있는가?
답은 “있다”다. 그리고 여러분은 지금 이에 대한 한 접근 방법을 읽고 있다. 마이클 래쉬는 방어 목적의 네트워크 기술을 창의적으로 이용하는 데 있어 개척자다. 특정 라스베가스 해커 컨벤션의 발제자 목록을 보면 알 수 있듯이 보안 연구와 개발 분야에서는 점점 더 공격 도구와 기술이 지배적이다. 마이클은 이러한 경향을 거슬러 공격으로부터 정보 자산을 보호하는 방법을 지속적으로 개발하고 발전시키고 있다. 공격을 위한 컨퍼런스에서 새로운 공격법이나 취약점을 본 후 대부분의 사람은 자신의 기업을 보호하기 위한 일상적인 업무에 복귀한다. 이 책을 통해 이러한 업무를 좀 더 쉽게 할 수 있는 추가적인 프로그램과 방법들을 알 수 있다.
이 책의 초안을 읽는 동안 나는 몇 가지 주제를 찾아낼 수 있었다. 첫째, 장치들이 자립적이 되고 인터넷에 노출됨에 따라 호스트-중심 방어가 점점 더 중요해지고 있다. 이러한 변화의 극단적인 예로 IPv6가 있다. IPv6가 원래 의도된 모습 그대로 보급되면 본래 인터넷의 “단대단(end-to-end)” 특성이 부활하게 된다. 물론 단대단은 공격자-대-희생자로도 생각할 수 있기 때문에 호스트가 자신을 스스로 보호할 수 있는 추가적인 방법이 중요해진다. 리눅스 방화벽을 통해 호스트가 호스트 기반 방화벽과 도구를 사용해서 어떻게 스스로를 보호하는지 알게 될 것이다.
둘째, 점차적으로 호스트가 스스로를 방어해야 한다는 사실에도 불구하고 호스트-중심 방법만으로는 충분하지 않다. 호스트는 일단 침투되면 더 이상 자기 자신을 보호할 수 없다. 침입자는 보통 시스템에 침투하자마자 호스트 방화벽, 안티바이러스 소프트웨어, 기타 보호 에이전트를 비활성화한다. 그러므로 여전히 네트워크-중심 필터링 장치가 필요하다. 희생자가 제어하는 종단(endpoint)은 네트워크 방화벽이 허용하는 통신 채널만을 사용할 수 있으며, 이는 최소한 침입자가 이용할 수 있는 작전을 제한한다. 리눅스 방화벽을 통해 네트워크 장치가 어떻게 호스트를 보호하는지도 알 수 있다.
셋째, 정보 자산을 방어하는 창의적인 방법을 보고 공격 분야를 이해해야 한다. 주의를 요하는 서비스에 대한 접근을 제한하고자 한다면 단일 패킷 권한 부여(Single Packet Authorization)가 포트 노킹(port knocking)보다 훨씬 발전된 방법이다. 시각화(visualization)는 로그와 트래픽을 보기 좋게 렌더링하며, 분석가는 이를 통해 관심 있는 미묘한 이벤트를 탐지할 수 있다. 이 책을 읽고 나면 방어 인프라스트럭처를 강화할 수 있는 추가적인 방법(저자를 포함해 다른 이들이 생각하지 못한 방법)을 발견할 수도 있다.
책의 검토자겸 저자의 입장에서 이 서문을 마치고자 한다. 2000년에서 2007년 중반 사이에 필자는 거의 250권에 달하는 기술 서적을 읽고 검토했다. 또 몇 권의 책도 집필했기 때문에 필자는 어떤 책이 훌륭한 책인지 식별하는 눈을 가졌다고 자부한다. 리눅스 방화벽은 훌륭한 책이다. 필자는 FreeBSD 사용자지만 라눅스 방화벽을 보면서 일부 경우에 대해 리눅스 사용을 고려하기도 했다! 마이클의 책은 매우 명확하며 구성이 우수하고 간결하며 바로 활용할 수 있다. 이 책의 예를 따라 해봄으로써 이 책에 나온 모든 것을 구현할 수 있다. 또 여러 도구에 익숙해지고 여러 기술을 활용하는 법을 배우는 것뿐만 아니라 방어에 대한 저자의 예리한 통찰력도 감상할 수 있다.
대다수의 전 세계 디지털 보안 전문가들은 공격은 공격자, 경찰, 군대에 남겨둔 채 방어에 집중하고 있다. 필자는 실질적인 방어 도구와 기술을 최소한의 비용과 노력으로 터득하고 도입할 수 있게 해주는 리눅스 방화벽과 같은 책을 환영한다. 행운을 빈다.
[ 이 책의 구성 ]
1장. iptables가 제공하는 보호
1장에서는 커널 빌드의 특이사항, iptables 관리 등을 포함해 iptables를 이용한 패킷 필터링을 소개한다. 기본 정책과 네트워크 다이어그램을 보이고 책의 나머지 부분에서 이를 참조한다. 기본 정책을 실행하는 리눅스 시스템은 근거리 네트워크(LAN, local area network)를 위한 방화벽으로 동작하며, 이 시스템에 대한 공격은 이어지는 여러 장에서 설명한다.
2장. 네트워크 계층 공격과 방어
2장에서는 네트워크 계층에 존재하는 공격 유형과 이에 대한 대응책을 다룬다. iptables 로깅 형식을 소개하고 iptables 로그에서 얻을 수 있는 네트워크 계층 정보를 중점적으로 설명한다.
3장. 전송 계층 공격과 방어
전송 계층은 포트 스캔(port scan)과 포트 스윕(port sweep)을 이용한 서버 정탐(reconnaissance) 영역이며, 3장에서는 이러한 방법의 내부 동작을 살펴본다. iptables 로깅 형식은 전송 계층 헤더 정보를 나타내는 데 적합하며, 이는 모든 종류의 위해를 탐지하는 데 유용하다.
4장. 애플리케이션 계층 공격과 방어
오늘날 행해지는 공격의 대다수는 TCP/IP 수트의 최상단에 올라가는 애플리케이션의 복잡도(이는 점점 더 증가하고 있다)를 이용한다. 4장에서는 iptables가 탐지할 수 있는 애플리케이션 계층 공격을 살펴보고 iptables의 문자열 매칭 확장을 소개한다.
5장. psad 소개
5장에서는 psad의 설치와 설정을 설명하고 iptables 로그를 살펴보는 것이 중요한 이유를 설명한다.
6장. psad의 동작: 수상한 트래픽 탐지
psad가 제공하는 기능은 다양하며 이러한 기능은 iptables 로그 메시지의 사용을 최대화하기 위해 설계된 것이다. 포트 스캔에서 백도어 탐사(backdoor probe)에 이르기까지 psad는 수상한 활동을 탐지하고 자세한 메일과 syslog 경고를 이용해 보고한다.
7장. psad 고급 주제: 서명 매칭에서 OS 핑거프린팅까지
7장에서는 통합된 수동적 OS 핑거프린팅(fingerprinting), 패킷 헤더를 통한 스노트 서명 탐지, 상세한 상태 정보, DShield 보고와 같은 psad의 고급 기능을 소개한다. 7장에서는 iptables 로그 정보가 보안 데이터를 어느 정도까지 제공할 수 있는지에 대한 모든 것을 다룬다.
8장. psad를 이용한 능동적 응답
공격에 자동적으로 응답하는 것에 대한 내용을 빼면 침입 탐지에 대한 논의를 마칠 수 없다. psad가 제공하는 응답 기능은 제3자 소프트웨어와 통합하기 쉽게 해주는 깔끔한 인터페이스 위에 만들어져 있으며, 8장에는 스와치(Swatch) 프로젝트와 통합하는 예도 담았다.
9장. 스노트 규칙을 iptables 규칙으로 변환
스노트 IDS는 네트워크 기반 공격을 탐지하는 방법을 보여줬으므로 iptables에서 스노트 서명 언어를 강화할 수 있다. iptables가 풍부한 로깅 형식과 애플리케이션 계층 데이터 조사 기능을 제공하기 때문에 스노트 서명의 상당 부분을 iptables 규칙으로 변환할 수 있다.
10장. fwsnort 배치
스노트 서명을 iptables 규칙으로 변환하는 지루한 작업은 fwsnort 프로젝트에 의해 자동화됐으며 10장에서는 이러한 자동화가 어떻게 동작하는지 설명한다. fwsnort를 배치함으로써 iptables 정책은 진정한 침입 탐지 능력을 가지게 된다.
11장. psad와 fwsnort의 결합
fwsnort가 생성하는 로그 메시지는 메일을 통한 좀 더 나은 보고를 위해 psad가 수집하고 분석한다(수동적 OS 핑거프린팅뿐만 아니라 통합된 whois와 역방향 DNS 검색[reverse DNS lookup]도 다룬다). 11장에서는 iptables로 수행할 수 있는 공격 탐지와 완화 전략의 최고봉을 보여준다.
12장. 포트 노킹과 단일 패킷 권한 부여
수동적 권한 부여는 네트워크에 연결된 서비스를 안전하게 유지하는 데 있어 점점 더 중요해지고 있다. 이러한 기술을 사용함으로써 제로 데이 취약점의 피해 범위는 크게 제한할 수 있지만 모든 수동적 권한 부여 패러다임이 중대한 배치에 충분하도록 견고한 것은 아니다. 12장에서는 포트 노킹(port knocking)과 단일 패킷 권한 부여(SPA)라는 두 가지 수동적 권한 부여 메커니즘을 비교하고 대조한다.
13장. fwknop 소개
오늘날 이용할 수 있는 SPA 구현은 몇 개뿐이며, fwknop는 가장 활발하게 개발되고 지원되는 구현 중 하나다. 13장에서는 fwknop의 설치법과 SSH 데몬(daemon)에 연결하고자 하는 모든 비인증과 비권한 부여 시도에 대해 기본 버리기(default-drop) 상태를 유지하기 위해 fwknop를 iptables와 함께 이용하는 방법을 다룬다.
14장. iptables 로그 시각화
이 책의 마지막 장은 iptables 로그 데이터의 그래픽 표현으로 마무리한다. 그림 하나가 시스템 침투를 의미할 수 있는 네트워크 통신 경향을 빠르게 보여줄 수 있으며, psad와 애프터글로우(AfterGlow) 프로젝트를 결합함으로써 iptables가 보여줘야 하는 것을 볼 수 있다.
부록 A. 공격 스푸핑
스노트 서명 규칙 집합을 파싱(parsing, 구문 분석)하고 이와 일치하는 패킷 데이터를 만든 후 이를 스푸핑된(spoofed) 출발지 주소(source address)로부터 퍼뜨리는 일은 매우 쉽다. 부록 A에서는 정확하게 이 공격을 수행하는 예제 펄 스크립트(fwsnort와 함께 제공됨)를 다룬다.
부록 B. 완전한 fwsnort 스크립트의 예
fwsnort 프로젝트는 애플리케이션 계층 공격을 탐지할 수 있는 iptables 정책 생성에 필요한 iptables 명령어 실행을 자동화하는 쉘 스크립트를 생성한다. 부록 B에는 fwsnort가 생성한 fwsnort.sh 스크립트의 완전한 예제를 담았다.
시스템 관리자는 자신이 관리하는 네트워크에 매일 노출되는 새로운 보안 취약점을 미리 대비해야 한다. 방화벽과 침입 탐지 시스템(IDS)은 접근을 사전에 막고 공격으로 보이는 네트워크 트래픽을 감시할 수 있게 해주는 중요한 도구다.
『리눅스 방화벽: 오픈소스를 활용한 철통 같은 보안』에서는 리눅스 커널에 내장되는 iptables 방화벽과 넷필터 프레임워크의 기술적인 면을 상세히 다루며, 상용 도구에 필적하는 강력한 필터링, 네트워크 주소 변환(NAT), 상태 추적, 애플리케이션 계층 검사 기능을 어떻게 제공하는지 알려준다. psad와 fwsnort를 함께 사용해서 iptables를 IDS로 배치하는 방법과 fwknop를 통해 iptables 위에 강력한 수동적 인증 계층을 생성하는 방법도 알려준다.
[ 소개 ]
날이 갈수록 공격이 우위를 점하는 것처럼 보인다. 거의 매일 소프트웨어 취약점에 대한 새로운 공격 방법, 좀 더 효과적인 스팸 전송 방법(필자의 받은 편지함이 이를 증명해준다), 또는 세간의 이목을 끄는 회사나 정부 조직의 민감한 개인 데이터 도난에 대한 뉴스가 등장한다. 안전한 컴퓨팅을 달성하는 것은 영원한 난제다. 악질적인 해커들을 무력화하게 설계된 기술에는 부족함이 없지만 해커들은 계속해서 시스템과 네트워크에 침투하고 있다.
모든 종류의 보안 문제점에 대해서 거의 대부분의 경우 이에 대응하게 설계된 공개 소스 솔루션이나 상용 솔루션이 존재한다. 이는 특히 방화벽, 필터링 라우터 등과 같은 네트워크 침입 탐지 시스템과 네트워크 접근 제어 장치 분야에서 그렇다. 방화벽 기술의 경향은 침입 탐지 분야의 애플리케이션 계층 검사 기술을 방화벽이 오랜 기간 해왔던 네트워크 트래픽 필터링과 결합하는 것이다. 이 책의 목표는 리눅스 시스템의 iptables 방화벽이 방화벽 분야의 이런 경향을 반영하기에 적합하다는 것, 특히 iptables가 침입 탐지의 관점에서 iptables를 강화하게 설계된 추가적인 소프트웨어와 결합할 때 더욱 적합하다는 것을 보이는 것이다.
필자는 현존하는 출간물 중 이 책이 몇 가지 면에서 유일하다고 생각한다. 리눅스 방화벽의 다양한 면을 논한 훌륭한 책은 많지만 필자가 아는 한 그 어떤 책도 iptables와 이것이 제공하는 데이터를 통해 탐지할 수 있는(그리고 어떤 경우에는 저지할 수 있는) 공격을 중점적으로 다루지는 않는다. 침입 탐지를 다룬 책도 많지만 침입 탐지 과정을 진정으로 보충하기 위해 방화벽 기술을 사용하는 데 초점을 둔 책은 없다. 이 책은 앞서 언급한 두 기술의 융합을 다룬다.
이 책에서는 공격 탐지와 방지에 대한 iptables의 유효성을 극대화하게 설계된 다음의 세 가지 공개 소스 소프트웨어 프로젝트를 자세히 살펴본다.
psad - iptables 로그 분석기와 능동적 응답 도구(active response tool)
fwsnort - 스노트(Snort) 규칙을 등가의 iptables 규칙으로 변환하는 스크립트
fwknop - iptables에 대한 단일 패킷 권한 부여(SPA, Single Packet Authorization)의 구현
이들은 모두 GNU 공개 라이선스(GPL) 하에서 공개 소스 소프트웨어로서 배포되며, http://www.cipherdyne.org에서 받을 수 있다.
[ 이 책에서 다루는 내용 ]
구체적인 예를 통해 방화벽 로그 분석과 정책, 수동적 네트워크 인증과 권한 부여, 공격 패킷 추적, 스노트 규칙 집합 에뮬레이션 등과 같은 개념을 확실히 알 수 있다. 이 책의 예제에서는 다음과 같은 내용을 다룬다.
• iptables 문자열 매칭 확장과 fwsnort를 사용한 애플리케이션 계층 공격 탐지
• 스노트 규칙 집합을 에뮬레이션하는 iptables 규칙 집합 생성
• 포트 노킹과 단일 패킷 권한 부여(SPA)
• iptables 로그를 시각화하기 위한 도구
• iptables를 이용한 수동적 OS 핑거프린팅
펄과 C 코드를 통해 리눅스 방화벽의 배치를 최적화할 수 있는 실질적인 예를 볼 수 있다.
네트워크를 안전하게 보호할 책임을 지고 있는 사람이라면 공격을 이해하는 데나 침투를 탐지하고 막기 위해 (psad나 fwsnort와 함께) iptables를 사용하는 데 『리눅스 방화벽』이 큰 도움될 것이다.
[ 추천의 글 ]
사람들은 대부분 방화벽(firewall)이라는 용어를 들으면 OSI 참조 모델의 네트워크 계층과 전송 계층에서 네트워크 트래픽을 검사하면서 통과나 필터링을 결정하는 제품을 떠올린다. 제품 측면에서 보면 방화벽에는 십여 개의 유형이 있다. 방화벽의 유형은 검사하는 데이터(예를 들어 네트워크 트래픽, 호스트 프로세스, 시스템 호출)와 이러한 데이터를 검사하는 깊이에 따라 구별된다. 통신을 검사하고 통과시킬지 필터링할지 결정하는 거의 모든 장치가 방화벽 제품이다.
프록시 방화벽의 발명가이자 최초의 상용 방화벽 제품의 구현자인 마커스 래넘(Marcus Ranum)은 1990년대 중반에 방화벽이라는 용어를 다음과 같이 정의했다. “방화벽은 인터넷 보안 정책의 구현이다. 이 정의는 제품 중립적이고 특정 시간에 한정되지 않으며 현실적이기 때문에 매우 훌륭하다. 이 정의는 지금 읽고 있는 이 책뿐만 아니라 윌리엄 체스윅과 스티븐 벨로빈이 쓴 최초의 방화벽 관련 서적인 『방화벽과 인터넷 보안(Addison-Wesley Professional, 1994)』에도 똑같이 적용된다.
래넘의 정의에 따르면 방화벽은 정책 강제 시스템(policy enforcement system)으로 생각할 수도 있다. 네트워크 트래픽을 검사한 후 이를 통과시키거나 필터링하는 장치를 네트워크 정책 강제 시스템이라고 하며 호스트-중심 활동을 검사한 후 이를 통과시키거나 필터링하는 장치를 호스트 정책 강제 시스템이라고 한다. 어떤 경우든 정책 강제를 중점적으로 생각해보면 방화벽의 역할이 단순히 “나쁜 것을 막는” 장치가 아니라 정책을 구현하는 장치라는 것을 알 수 있다.
“나쁜 것”과 관련해서 방화벽이 오늘날의 기업에도 여전히 중요한지 의문을 가질 수 있다. 적절히 설정한 전통적인 네트워크 방화벽 제품은 기본적으로 허용된 인터넷 프로토콜, IP 주소, TCP/UDP 포트, ICMP 유형과 코드를 제외한 모든 것을 차단한다. 요즘의 공격 환경에서 이런 종류의 방어로는 불충분하다. 이러한 공격 채널을 제한하는 것은 목표로의 입구와 출구 경로를 제한하기 위해 필요하지만 네트워크와 전송 계층 필터링은 최소한 지난 10년간 전혀 충분치 못한 대책이었다.
2007년 현재 클라이언트에 침투하는 가장 효과적인 방법은 사용자가 악의적인 실행 파일을 활성화하게 유도하거나 사용자에게 악의적인 콘텐트를 호스팅하는 링크를 전송하는 것, 또는 사용자 컴퓨팅 경험의 다른 클라이언트 측 컴포넌트를 공격하는 것이다. 많은 경우 공격은 패치(patch)할 수 있는 취약점이나 강화할 수 있는 설정에 의존하지 않는다. 대신 공격자는 오늘날 웹을 탐색하는 데 점점 더 필요해지고 있는 자바스크립트나 플래시 같은 리치미디어(rich-media) 플랫폼의 약점을 공격한다.
2007년 현재 서버에 침투하는 가장 효과적인 방법은 운영체제를 피해 애플리케이션을 공격하는 것이다. 웹 애플리케이션이 서버 분야를 지배하고 있으며, 웹 애플리케이션의 문제점은 패치할 수 있는 취약점보다 구조적 결함이나 설계 결함에 있다. 1990년대 후반에는 안전하지 않은 웹 애플리케이션임을 보이기 위해 장바구니 항목의 가격을 변경하는 것이 유행이었다. Ajax의 덕분에 거의 10년 후인 지금 장바구니는 클라이언트에서 동작하고 있으며 사용자들은 또 다시 가격을 변경하고 있다(이는 더욱 안 좋은 것이다).
앞서 설명한 모든 것으로 인해 방화벽 제품의 미래가 어두워진 듯 보인다. 많은 방화벽이 상세한 패킷 검사를 포함하거나 OSI 참조 모델의 애플리케이션 계층이나 그보다 상위 계층에서 동작함으로써 변화에 적응해왔다. 다른 방화벽들은 필수품화된 것처럼 보이는 시장에서 자신을 차별화하기 위해 영리한 마케팅 용어를 사용하면서 침입방지시스템(intrusionpreventionsystem)으로서 동작한다. 클라이언트 측 공격과 웹 애플리케이션 공격의 시대에 방화벽, 특히 공개 소스 제품이 설 자리가 있는가?
답은 “있다”다. 그리고 여러분은 지금 이에 대한 한 접근 방법을 읽고 있다. 마이클 래쉬는 방어 목적의 네트워크 기술을 창의적으로 이용하는 데 있어 개척자다. 특정 라스베가스 해커 컨벤션의 발제자 목록을 보면 알 수 있듯이 보안 연구와 개발 분야에서는 점점 더 공격 도구와 기술이 지배적이다. 마이클은 이러한 경향을 거슬러 공격으로부터 정보 자산을 보호하는 방법을 지속적으로 개발하고 발전시키고 있다. 공격을 위한 컨퍼런스에서 새로운 공격법이나 취약점을 본 후 대부분의 사람은 자신의 기업을 보호하기 위한 일상적인 업무에 복귀한다. 이 책을 통해 이러한 업무를 좀 더 쉽게 할 수 있는 추가적인 프로그램과 방법들을 알 수 있다.
이 책의 초안을 읽는 동안 나는 몇 가지 주제를 찾아낼 수 있었다. 첫째, 장치들이 자립적이 되고 인터넷에 노출됨에 따라 호스트-중심 방어가 점점 더 중요해지고 있다. 이러한 변화의 극단적인 예로 IPv6가 있다. IPv6가 원래 의도된 모습 그대로 보급되면 본래 인터넷의 “단대단(end-to-end)” 특성이 부활하게 된다. 물론 단대단은 공격자-대-희생자로도 생각할 수 있기 때문에 호스트가 자신을 스스로 보호할 수 있는 추가적인 방법이 중요해진다. 리눅스 방화벽을 통해 호스트가 호스트 기반 방화벽과 도구를 사용해서 어떻게 스스로를 보호하는지 알게 될 것이다.
둘째, 점차적으로 호스트가 스스로를 방어해야 한다는 사실에도 불구하고 호스트-중심 방법만으로는 충분하지 않다. 호스트는 일단 침투되면 더 이상 자기 자신을 보호할 수 없다. 침입자는 보통 시스템에 침투하자마자 호스트 방화벽, 안티바이러스 소프트웨어, 기타 보호 에이전트를 비활성화한다. 그러므로 여전히 네트워크-중심 필터링 장치가 필요하다. 희생자가 제어하는 종단(endpoint)은 네트워크 방화벽이 허용하는 통신 채널만을 사용할 수 있으며, 이는 최소한 침입자가 이용할 수 있는 작전을 제한한다. 리눅스 방화벽을 통해 네트워크 장치가 어떻게 호스트를 보호하는지도 알 수 있다.
셋째, 정보 자산을 방어하는 창의적인 방법을 보고 공격 분야를 이해해야 한다. 주의를 요하는 서비스에 대한 접근을 제한하고자 한다면 단일 패킷 권한 부여(Single Packet Authorization)가 포트 노킹(port knocking)보다 훨씬 발전된 방법이다. 시각화(visualization)는 로그와 트래픽을 보기 좋게 렌더링하며, 분석가는 이를 통해 관심 있는 미묘한 이벤트를 탐지할 수 있다. 이 책을 읽고 나면 방어 인프라스트럭처를 강화할 수 있는 추가적인 방법(저자를 포함해 다른 이들이 생각하지 못한 방법)을 발견할 수도 있다.
책의 검토자겸 저자의 입장에서 이 서문을 마치고자 한다. 2000년에서 2007년 중반 사이에 필자는 거의 250권에 달하는 기술 서적을 읽고 검토했다. 또 몇 권의 책도 집필했기 때문에 필자는 어떤 책이 훌륭한 책인지 식별하는 눈을 가졌다고 자부한다. 리눅스 방화벽은 훌륭한 책이다. 필자는 FreeBSD 사용자지만 라눅스 방화벽을 보면서 일부 경우에 대해 리눅스 사용을 고려하기도 했다! 마이클의 책은 매우 명확하며 구성이 우수하고 간결하며 바로 활용할 수 있다. 이 책의 예를 따라 해봄으로써 이 책에 나온 모든 것을 구현할 수 있다. 또 여러 도구에 익숙해지고 여러 기술을 활용하는 법을 배우는 것뿐만 아니라 방어에 대한 저자의 예리한 통찰력도 감상할 수 있다.
대다수의 전 세계 디지털 보안 전문가들은 공격은 공격자, 경찰, 군대에 남겨둔 채 방어에 집중하고 있다. 필자는 실질적인 방어 도구와 기술을 최소한의 비용과 노력으로 터득하고 도입할 수 있게 해주는 리눅스 방화벽과 같은 책을 환영한다. 행운을 빈다.
Richard Bejtlich
제네럴 일렉트릭 사의 사고 대응팀장
제네럴 일렉트릭 사의 사고 대응팀장
[ 이 책의 구성 ]
1장. iptables가 제공하는 보호
1장에서는 커널 빌드의 특이사항, iptables 관리 등을 포함해 iptables를 이용한 패킷 필터링을 소개한다. 기본 정책과 네트워크 다이어그램을 보이고 책의 나머지 부분에서 이를 참조한다. 기본 정책을 실행하는 리눅스 시스템은 근거리 네트워크(LAN, local area network)를 위한 방화벽으로 동작하며, 이 시스템에 대한 공격은 이어지는 여러 장에서 설명한다.
2장. 네트워크 계층 공격과 방어
2장에서는 네트워크 계층에 존재하는 공격 유형과 이에 대한 대응책을 다룬다. iptables 로깅 형식을 소개하고 iptables 로그에서 얻을 수 있는 네트워크 계층 정보를 중점적으로 설명한다.
3장. 전송 계층 공격과 방어
전송 계층은 포트 스캔(port scan)과 포트 스윕(port sweep)을 이용한 서버 정탐(reconnaissance) 영역이며, 3장에서는 이러한 방법의 내부 동작을 살펴본다. iptables 로깅 형식은 전송 계층 헤더 정보를 나타내는 데 적합하며, 이는 모든 종류의 위해를 탐지하는 데 유용하다.
4장. 애플리케이션 계층 공격과 방어
오늘날 행해지는 공격의 대다수는 TCP/IP 수트의 최상단에 올라가는 애플리케이션의 복잡도(이는 점점 더 증가하고 있다)를 이용한다. 4장에서는 iptables가 탐지할 수 있는 애플리케이션 계층 공격을 살펴보고 iptables의 문자열 매칭 확장을 소개한다.
5장. psad 소개
5장에서는 psad의 설치와 설정을 설명하고 iptables 로그를 살펴보는 것이 중요한 이유를 설명한다.
6장. psad의 동작: 수상한 트래픽 탐지
psad가 제공하는 기능은 다양하며 이러한 기능은 iptables 로그 메시지의 사용을 최대화하기 위해 설계된 것이다. 포트 스캔에서 백도어 탐사(backdoor probe)에 이르기까지 psad는 수상한 활동을 탐지하고 자세한 메일과 syslog 경고를 이용해 보고한다.
7장. psad 고급 주제: 서명 매칭에서 OS 핑거프린팅까지
7장에서는 통합된 수동적 OS 핑거프린팅(fingerprinting), 패킷 헤더를 통한 스노트 서명 탐지, 상세한 상태 정보, DShield 보고와 같은 psad의 고급 기능을 소개한다. 7장에서는 iptables 로그 정보가 보안 데이터를 어느 정도까지 제공할 수 있는지에 대한 모든 것을 다룬다.
8장. psad를 이용한 능동적 응답
공격에 자동적으로 응답하는 것에 대한 내용을 빼면 침입 탐지에 대한 논의를 마칠 수 없다. psad가 제공하는 응답 기능은 제3자 소프트웨어와 통합하기 쉽게 해주는 깔끔한 인터페이스 위에 만들어져 있으며, 8장에는 스와치(Swatch) 프로젝트와 통합하는 예도 담았다.
9장. 스노트 규칙을 iptables 규칙으로 변환
스노트 IDS는 네트워크 기반 공격을 탐지하는 방법을 보여줬으므로 iptables에서 스노트 서명 언어를 강화할 수 있다. iptables가 풍부한 로깅 형식과 애플리케이션 계층 데이터 조사 기능을 제공하기 때문에 스노트 서명의 상당 부분을 iptables 규칙으로 변환할 수 있다.
10장. fwsnort 배치
스노트 서명을 iptables 규칙으로 변환하는 지루한 작업은 fwsnort 프로젝트에 의해 자동화됐으며 10장에서는 이러한 자동화가 어떻게 동작하는지 설명한다. fwsnort를 배치함으로써 iptables 정책은 진정한 침입 탐지 능력을 가지게 된다.
11장. psad와 fwsnort의 결합
fwsnort가 생성하는 로그 메시지는 메일을 통한 좀 더 나은 보고를 위해 psad가 수집하고 분석한다(수동적 OS 핑거프린팅뿐만 아니라 통합된 whois와 역방향 DNS 검색[reverse DNS lookup]도 다룬다). 11장에서는 iptables로 수행할 수 있는 공격 탐지와 완화 전략의 최고봉을 보여준다.
12장. 포트 노킹과 단일 패킷 권한 부여
수동적 권한 부여는 네트워크에 연결된 서비스를 안전하게 유지하는 데 있어 점점 더 중요해지고 있다. 이러한 기술을 사용함으로써 제로 데이 취약점의 피해 범위는 크게 제한할 수 있지만 모든 수동적 권한 부여 패러다임이 중대한 배치에 충분하도록 견고한 것은 아니다. 12장에서는 포트 노킹(port knocking)과 단일 패킷 권한 부여(SPA)라는 두 가지 수동적 권한 부여 메커니즘을 비교하고 대조한다.
13장. fwknop 소개
오늘날 이용할 수 있는 SPA 구현은 몇 개뿐이며, fwknop는 가장 활발하게 개발되고 지원되는 구현 중 하나다. 13장에서는 fwknop의 설치법과 SSH 데몬(daemon)에 연결하고자 하는 모든 비인증과 비권한 부여 시도에 대해 기본 버리기(default-drop) 상태를 유지하기 위해 fwknop를 iptables와 함께 이용하는 방법을 다룬다.
14장. iptables 로그 시각화
이 책의 마지막 장은 iptables 로그 데이터의 그래픽 표현으로 마무리한다. 그림 하나가 시스템 침투를 의미할 수 있는 네트워크 통신 경향을 빠르게 보여줄 수 있으며, psad와 애프터글로우(AfterGlow) 프로젝트를 결합함으로써 iptables가 보여줘야 하는 것을 볼 수 있다.
부록 A. 공격 스푸핑
스노트 서명 규칙 집합을 파싱(parsing, 구문 분석)하고 이와 일치하는 패킷 데이터를 만든 후 이를 스푸핑된(spoofed) 출발지 주소(source address)로부터 퍼뜨리는 일은 매우 쉽다. 부록 A에서는 정확하게 이 공격을 수행하는 예제 펄 스크립트(fwsnort와 함께 제공됨)를 다룬다.
부록 B. 완전한 fwsnort 스크립트의 예
fwsnort 프로젝트는 애플리케이션 계층 공격을 탐지할 수 있는 iptables 정책 생성에 필요한 iptables 명령어 실행을 자동화하는 쉘 스크립트를 생성한다. 부록 B에는 fwsnort가 생성한 fwsnort.sh 스크립트의 완전한 예제를 담았다.