작은 메모장

13. 보안장비와 NSM 본문

실더스 루키즈 교육

13. 보안장비와 NSM

으앙내눈 2023. 12. 11. 17:51

보안장비

보안에 사용하는 장비는 다양한 장비가 존재한다.

 

Multilayer Switch

다계층스위치, 2계층뿐만이 아니라 더 넓은 영역을 담당하는 스위치를 가리키는 용어다.

기본적으로 스위치는 L2, 즉 2계층을 담당하는 장비나, 사내망을 구성하기 위해 더 넓은 계층의 스위치가 필요해졌다.

기본적으로 다계층스위치는 이러한 종류와 기능을 가지고 있으며, 다계층 스위치를 말하는 것은 L3, L4, L7 스위치를 의미하는 것이다.

그럼 이 Multilayer Switch는 어떻게 동작하는 것인가

L3 Switch의 동작과정 먼저 알아보자

L3 스위치는 L2 스위치는 기본적으로 동작과정이 비슷하다.

L2 스위치가 수신지의 MAC 주소를 기반으로 Forwarding Port를 정해준 것처럼,

L3 스위치는 수신지의 IP 주소를 기반으로 Forwarding Port를 정해준다.

이 때, L2스위치의 MAC Address Table을 확인하는 것처럼, L3 스위치는 Routing Table을 기반으로 경로를 정한다.

L4 스위치는 수신지의 IP 주소와 더불어 수신지의 Port 번호를 확인하여 경로를 정한다.

L7 스위치는 수신지의 IP 주소, 수신지의 Port 번호, 그리고 그 내용물(Content)까지 확인하여 경로를 정한다.

 

단순하게 생각해보면,

L3 스위치는 L2 스위치에다가 Routing 기능을 추가한 것으로, 규모가 작은 라우터와 다를 것이 없다.

그래서 사내망에서 L3 스위치는 망의 Gateway 역할을 주로 하는 편이다.

L4 스위치는 L3 스위치에다가 Load Balancing 기능을 추가한 것으로, 사실상 이 기능 쓰려고 사용하는 것이다.

Load Balancing 기능이란, Scale Out, 즉 동일 기능을 가진 서버를 확장시키는 과정에서, 각 서버에게 균등하게 트래픽을 분산시켜주는 기능으로, 트래픽 부하를 최대한 분산시켜 서비스를 안정화하는 기능이다. 

그래서 사내망에서 L4 스위치는 방화벽 앞뒤에 붙어 트래픽을 분산시켜주거나 (FLB, Firewall Load Balancing) , 서버 팜 앞에 붙어 트래픽을 분산시켜주는 역할을 주로 하는 편이다. (SLB, Server Load Balancing)

L7 스위치는 L4 스위치에다가 Content 확인 기능을 추가한 것으로, Content를 통한 Load Balancing을 하는 편이다.

L7 스위치는 Content 내부에 있는 각종 정보(도메인 등)을 확인하여 서버에 연결시켜주는 역할을 한다.

즉, Load Sharing, 트래픽 비균을 분산을 지원하는 것이다.

그래서 사내망에서 L7 스위치는 더 심도깊은 분석을 요하는 서버 팜 앞에 붙어 트래픽을 분산시켜주는 역할을 주로 하는 편이다.

 

 

DHCP

Dynamic Host Configuration Protocol, 즉 동적 호스트 구성 프로토콜

호스트의 IP 주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 제공해주는 프로토콜로, 네트워크 내부 컴퓨터에 자동으로 도메인 네임 주소, IP주소, 게이트웨이 주소를 할당해주는 역할을 하며, 해당 클라이언트에게 일정기간 네트워크 정보를 임대를 하는 동적 주소 할당 프로토콜이다.

 

말만 많이 어렵게 했지, 사실상 동적으로 네트워크를 부여/관리해주는 프로토콜이다.

네트워크 망에 새 기기가 추가되면, 그 기기에게 IP 주소 및 DNS 서버 주소, 게이트 웨이 주소를 자동으로  물려준다. DHCP가 없다면 어떻게 되냐고?

네트워크 바뀔 때마다 이거 직접 입력하고 있어야한다. 상당히 귀찮고 관리도 힘든 부분.

이 DHCP 프로토콜이 있기 때문에, 자동으로 IP 주소 받기같은 기능이 있다.

 

 

사설 IP과 공인 IP

사설 IP, 즉 사설 망은 인터넷과 연동되지 않은 사적인 네트워크, 독립된 네트워크에서 사용하는 사적인 주소다.

사적인 주소이므로, 당연히 공인 망(인터넷 상)에서는 사용할 수 없다.

그럼 뭐가 사설 IP고 뭐가 공인 IP냐고? 사실 이건 국제 규약으로 정해놓았다.

IETF RFC 1918 규약에 명시되어 있으며, 각 IP 클래스마다 사설 IP로만 사용해야 하는 대역을 정해놓았다.

A Class: 10.?.?.?

B Class: 172.16.?.? ~ 172.31.?.?

C Class: 192.168.?.?

 

 

NAT

Network Address Translation, 즉 네트워크 주소 변환 기능

공인 IP와 사설 IP를 매핑시켜주는 기능.

 

사설 IP는 공인 망에서 사용할 수 없는 주소라고 했다. 그럼 사설 IP를 부여받은 기기는 뭘로 통신을 하나?

이에 사설 IP와 공인 IP를 매핑시켜주는 기능, NAT 기능을 쓰는 것이다.

NAT에는 두가지종류가 있다. SNAT와 DNAT로 나뉜다.

두 NAT의 차이는 간단하다. Source 주소를 바꾸면 SNAT, Destination 주소를 바꾸면 DNAT다.

SNAT는 송신지의 IP를 바꾸는 것으로, 패킷이 사설망에서 공인망으로 나갈 시 실행된다.

이는 후에 통신이 되돌아 올 때 자신의 공인 IP로 다시 찾아오도록 하게 만드는 이유에서 실행된다.

DNAT는 수신지의 IP를 바꾸는 것으로, 패킷이 공인망에서 사설망으로 들어올 시 실행된다.

이는 되돌아온 통신이 어느 사설 IP로 가야할 지 찾아가게 만드는 이유에서 실행된다.

 

이 체제에는 하나의 문제가 있는데, 여러대의 사설 IP가 단 하나의 공인 IP로 바뀐다는 것이다.

이게 왜 문제냐하면, 나갈 때 공인 IP로 바뀐것은 좋은데, 갔다가 되돌아온 통신이 공인 IP를 보고 어떤 사설 IP로 바뀌어야하는지 모른다는 것.

즉, 공인 IP로 바꿀 때 사설 IP를 구분할 수 있는 새 기준이 필요하다는 것이다.

이에 필요한 기능이 PAT(Port Address Translation)이다. 

원리는 간단하다. 사설 IP의 몇번 포트를 공인 IP의 몇번 포트로 매핑시키겠다는 것.

가령,
192.168.0.10:21을 125.209.222.142:10000으로 매핑

192.168.0.10:443을 125.209.222.142:12000으로 매핑

192.168.0.20:21을 125.209.222.142:13000으로 매핑

이런식으로 관리할 수 있다. 이 매핑된 정보는 NAT 테이블에 저장된다.

 

NAT의 장점은 여러가지가 있는데,

1. 여러 장비를 공인 IP 하나로 묶을 수 있으니, 공인 IP 임대료가 효과적으로 줄어든다.

2. 여러 장비가 공인 IP 하나로 묶이니, 공인 IP 밑에 있는 사설 IP로 해킹하기 힘들다. 즉, 보안성이 좋아진다.

 

 

SoHo(Small office/Home office)에서 NAT는 주로 공유기가 담당하고 있다.

공유기는 WAN 구간과 LAN 구간을 연결시켜주고 있다. 즉 외부 네트워크(통신사업자 제공망)와 내부 네트워크(사설 망)을 연결한다.

단순히 연결만 하는 것이 아니라, 허브처럼 패킷도 전달해주고, DHCP 기능도 들어가 있으며, NAT 기능또한 들어가 있다.

 

기업에서 NAT는 NAT 전용 장비가 따로 있다.

NAT 장비는 기업에서 주로 사설 네트워크를 보호하는 역할로 사용한다.

즉, 사설 망의 IP를 가리기 위한 용도로 사용한다.

이렇게 되면, 외부에서 보여지는 것은 자사의 Network와 NAT의 공인 IP 뿐이다.

 

 

보안정책 수립

Hardening(하드닝)

"정보를 저장하고 있는 컴퓨터나 네트워크 등과 같은 환경을 굳건하게 만든다"라는 뜻, 요새화라고도 부름

즉 외부에서 침입해도 해킹하기 어렵게 보안을 정밀하게 만든다는 뜻이다.

방법은 여러가지가 있는데,

- 외부에 공개하는 서비스를 줄임

- 작동하는 장비를 파악

- 불필요한 실행 프로그램 중지

- 신속한 취약점 패치

- 네트워크 다층방어

등등이 있다.

 

보안망 구성도

보안망은 크게 4곳으로 나뉜다.

외부에서 직접 접근이 가능한 인터넷(Internet),

물리적으로 분리되어 외부에서 직접 접근이 불가능한 인트라넷(Intranet)

외부망과 내부망 사이에서 서비스/정보 등을 제공하는 DMZ,

회사 대 회사로 서비스 연동을 하며 협력하는 엑스트라넷(Extranet)

 

보안 정책을 논할 때 가장 많이 사용하는 장비는, 방화벽, IDS, IPS다.

방화벽은 침입 통제 시스템으로, 접근 제어 룰에 기반해 접근을 통제한다.

IDS는 침입 탐지 시스템으로, 탐지 룰을 능동적으로 생성해 접근을 통제한다.

IPS는 침입 차단 시스템으로, 접근 제어 룰과 탐지 룰 생성을 동시에 한다.

 

기본적인 보안 장비의 구성은 위와 같다.

자세히 보면 인터넷의 IPS와 DMZ에서 NIDS 장비가 연결된 방식이 서로 다른데,

장비를 무조건적으로 거치게 만드는 연결 방식은 Inline 방식,

정보가 이동하는 경로 밖에 설치하여 정보만 복사해오는 Out-of Path 방식(Mirror 방식)으로 나뉜다.

 

Inline 방식은 물리적인 네트워크 경로 상에 보안장비를 설치하는 방식으로, 네트워크를 통과하는 모든 트래픽이 보안 장비를 거쳐가도록 하는 방식이다.

주로 Anti-DDoS, 방화벽, IPS등 패킷 차단 목적의 장비에 적용한다.

실시간으로 패킷을 탐지하고 차단하는 능력은 탁월하나, 장비에 장애가 발생할 경우 전체 네트워크가 마비되는 단점이 있다.

 

Out-of Path방식은 TAP같은 미러링 장비를 통해 복제된 패킷을 받아서 탐지하는 방식이다.

주로 IDS, Anti-APT, 네트워크 포렌식 같은 패킷 탐지 목적 장비에 적용한다.

실시간으로 패킷을 차단하지는 못하지만, 장비에 장애가 발생하더라도 전체 네트워크의 가용성을 해치지는 않는다.

 

 

방화벽(Firewall)

IP주소와 포트번호를 기반으로 방화벽 Rule Set(필터링 정책)에 따라 패킷 필터링을 수행하는 보안 장비

주요 역할은

- 접근 제어 / 패킷 필터링

- NAT

- 액세스 기록

- 사용자 인증

- 암호화 + 터널링

등이 있다.

 

방화벽의 큰 특징이라면, 트래픽 흐름의 방향마다 보안 정책을 수립하는 것이 가능하다는 것.

즉, 외부에서 내부로 들어오는 방향 뿐 아니라, 외부에서 DMZ, 내부에서 외부, 내부에서 DMZ 등으로 정책을 수립하는 것이 가능하다.

간단한 방화벽 흐름 제어 표다. 상술하듯 모든 방향에 대해 할 수 있는 작업 및 권한이 설정되어 있는 것을 확인할 수 있다.

 

예를들어 내부에서 카카오톡을 사용하지 못하게 만들고 싶다고 하자.

그렇다면 트래픽의 방향은 내부에서 외부로 나가는 카카오톡 패킷을 막아야 할 것이다.

따라서 내부 -> 외부로 가는 방향에 대해 정책을 수립하게 된다.

카카오톡이 사용하고 있는 포트번호와 서버 IP 주소는 다음과 같으며, 해당 사항에 맞게 정책을 수립하면 카카오톡을 사용하지 못하게 막는 것이 가능하다.

 

방화벽의 한계는 간단하다, 딱 설정한 정책에만 강하다는 것이다.

즉, 내부 네트워크에 이미 존재하는 악의적 공격은 막지 못하며, 방화벽을 경유하지 않는 공격은 막지 못한다.

또한, 보안 담당자의 실수로 인해 방어 규칙에 포함되지 않은 공격을 막을 수 없다.

혹은, 메일에 첨부된 악성 코드와 같이 데이터에 실려있는 악성 코드나 바이러스를 막을 수 없다.

그리고, 열려있는 포트에 대한 DoS와 DDoS 공격에 취약하다는 특징이 있다.

 

 

침입 탐지 시스템, IDS(Intrustion Detection System)

IDS는 기존 방화벽의 단점을 보완하고자 나온 장비로, 공격을 탐지하고 관리자에게 공격 알림을 통해 공격에 대처할 수 있게 해주는 보안 시스템이다.

IDS는 전달하는 패킷 내용이나 로그를 분석해 공격 여부를 탐지한다. 즉, 내부 악성코드를 탐지할 수 있다.

IDS의 종류에는 HIDS(Host-based IDS)와 NIDS(Network-based IDS)로 나뉜다.

 

 

HIDS는 호스트 기반의 IDS로, 서버에 직접 IDS를 설치함으로 네트워크 환경과 무관한 특징이 있다.

호스트의 자원 사용 실태, 로그 등을 분석하여 칩입 여부를 탐지한다.

주요 목표는 무결성 점검으로, 이를 통해 침입 여부를 식별한다.

최초 설치 시 초기 데이터베이스에 중요 파일들에 대한 해시값을 저장한 후,

주기적으로 중요 파일의 해시값 변조 유무를 검사/탐지/분석해 결과를 보고한다.

 

예를 들어보자

내가 12/8에 HDD1에 만든 텍스트 파일의 해시값과 IDS가 12/12에 HDD1에 있는 텍스트 파일의 해시값이 다르다면, 이 파일은 변조가 일어났다고 판단할 수 있는 것이다.

이에 기반하여 동작하는 것이 HIDS다. 오픈 소스 IDS로 유명한 것이 Tripwire이다.

 

 

NIDS는 네트워크 기반의 IDS로, 네트워크 상에서 일어나는 침입 시도를 탐지한다.

네트워크 세그먼트, 즉 DMZ로 들어오는 네트워크 경로 당 하나의 장비에만 설치하면 되므로, 설치하기 편하다는 특징이 있다.

패킷을 수집하기 위해, 스위치나 PAT상에서 패킷을 복사한 다음, NIDS장비로 전달하는 Mirroring 방식을 사용한다.

이렇게 들어온 패킷은 계속 쌓기만 하면 용량이 너무 크기 때문에, 분석에 용이하도록 필터링과 축약(Reduction)과정을 거친다. 여기서 필터링은 불필요한 정보를 제거해 지정된 수준의 데이터만 수집하는 것, 축약은 통계정/수학적 기법을 적용해 반복되는 데이터를 줄이는 과정이다.

오픈 소스 IDS로 유명한 것이 Snort다.

 

 

미탐지(False Negative)와 오탐지(False Positive)

미탐지는 공격을 탐지하지 못하는 경우로, 시그니처 기반의 탐지 시스템이면 미탐지일 확률이 높다.

오탐지는 공격이 아닌것을 공격으로 잘못 탐지하는 경우로, 행동 기반의 탐지 시스템이면 오탐지일 확률이 높다.

 

IDS의 탐지방법은 오용탐지와 이상탐지로 나뉜다.

오용탐지(Misuse Detection)는 시그니처 기반의 탐지로, 알려진 공격법이나 보안 정책에 위반하는 행동에 대한 패턴을 탐지하는 것이다.

공격을 분석한 후 그 결과를 바탕으로 패턴을 설정하는 것으로, 패턴(시그니처)와 비교하여 일치하는 경우 침입으로 간주한다.

이상탐지(Anomaly Detection)는 행동 기반의 탐지로, 정상 범위를 벗어나는 데이터를 탐지하는 방법이다.

정량적인 분석, 통계적 분석을 사용하여 형태, 프로파일을 파악하고, 이를 기반으로 이상여부를 확인한다.

IDS가 이상탐지 분석 대상으로 삼는 것들은 I/O 사용량, 로그인 횟수, 패킷량 등이 있다.

 

오용탐지의 가장 큰 장점은, 오탐률이 낮다는 것, 즉 잘못 탐지하는 경우가 낮다는 것이다. 또한, 트로이, 백도어 등 알려져있는 공격들에 대해 효과적으로 막을 수 있다.

하지만 공격을 탐지하지 못하는(미탐) 경우가 많으며, 새 공격 패턴에 대해 지속적으로 공격 패턴 갱신이 필요하다. 패턴에 없는 공격에 대해서는 탐지가 불가능하기 때문이다.

이상탐지는 오용탐지와 정반대로, 미탐률이 낮으며, 인공지능 알고리즘이 스스로 판단해 관리자가 패턴을 계속 업데이트할 필요가 없다. 때문에 알려지지 않는 새로운 공격을 효과적으로 탐지할 수 있다.

그러나 오탐률이 높으며, 정상/비정상 구분을 위한 임계치를 설정하는데 어려움이 있다.

 

 

- 종합적으로, IDS는 방화벽의 단점을 효과적으로 보완해주나, 한계또한 명확하다.

일단 상술하였듯 오탐지와 미탐지의 문제가 발생한다는 것. 즉, 공격에 대한 패턴을 모른다면 분석/탐지가 어렵다는 것.

또한 악성코드의 단편화(Fragmentation), 난독화, 암호화와 같은 기술은 감지하기가 어렵다는 한계가 있다. 코드를 쪼개고, 읽기 어렵게 만들고, 암호를 걸어버리면 특징(시그니처)를 만들기가 어렵기 때문이다.

 

 

침입 방지 시스템, IPS(Intrusion Prevention System)

IPS는 IDS의 탐지 기능과 방화벽의 차단 기능을 결합한 장비로,

이상 행위 탐지를 통해 알려지지 않은 공격 패턴에 대응함과 동시에, 가상 실행, 정책 수립을 통해 공격에 대한 사전 방지를 조치한다.

적극적인 공격 방어 장비로,  적극적이고 능동적인 보안 솔루션으로 Inline 방식으로 설치 및 운영한다.

실시간 침입 차단, 인터넷 웜, 악성 코드 및 해킹에 기인한 악성 트래픽을 차단한다.

 

IPS는 침입을 차단하기 위한 시스템 필터를 7개를 가지고 있다.

아니 필터가 7개나 있으면 속도가 겁나 느려지는거 아님? 맞다.

이에 여러가지 대책이 많이 나왔는데, 일단 IPS는 각 필터를 꺼고 킬 수 있다. 아무리 그래도 이걸로 속도가 획기적인 속도 향상은 없을 것이다.

때문에 이 IPS에 들어가는 프로세서는 일반적인 프로세서가 아닌, IPS만을 위한 특수한 프로세서가 들어간다. 이 프로세서를 사용하여 필터링에 최적화 된 작업을 진행해 속도 저하가 일어나지 않도록 한다.

 

 

웹 어플리케이션 방화벽, WAF(Web Application Firewall)

일반적으로 외부 네트워크에서 내부 네트워크를 들여다보긴 힘들다. NAT으로 막혀있기 때문이다.

하지만 외부 네트워크에서 내부 네트워크의 자원을 가져갈 수 있는 경로가 또 있는데, 거기가 DMZ이다.

DMZ에는 일반적으로 사측에서 서비스하고 있는 웹 서버라던가, 파일 서버 등이 존재한다.

문제는 웹 서비스의 취약점을 이용하면, 내부 네트워크의 정보를 제 집 지나들듯 빼가는게 가능하다는 것.

때문에 웹 취약점만을 중점으로 방어하는 방화벽이 따로 필요해졌는데, 이게 WAF장비다.

 

WAF장비는 방화벽 뒤와 웹 서버 앞 사이에 두며, 웹 컨텐츠를 분석하여 공격을 탐지 및 차단하는 기능을 가진다.

중점적으로 보는 것은, 정보 유출, 부정 로그인, 웹사이트 위변조 등을 검사한다.

 

 

네트워크 접근 제어, NAC(Network Access Control)

일을 하다 보면, 회사 밖에서 서버로 접근할 경우가 많다. 외근을 한다던지, 파견을 나간다던지, 이유는 많다.

문제는 외부 네트워크에서 내부 네트워크로 들어와야하는데, 내 기기가 감염된 상태로 내부 네트워크로 들어오면 바이러스에 매우 취약해진다.

이에 정당한 권한을 가진 사용자가 내부 인트라넷으로 접근 할 시, 보안 항목을 점검해주는 장비가 바로 NAC 장비다.

 

거창한 설명을 하였지만 NAC 장비가 점검하는 항목은 상당히 간단하다.

- 정상적인 장치를 사용했는가?

- 정당한 접근 권한을 가지고 있는가?

- 안티 바이러스가 설치 되어있는가?

- 보안패치가 설치 되었는가?

이런 것들을 점검한다.

 

 

가상 암호화 네트워크, VPN(Virtual Private Network)

초반에 설명할 때, 회사와 회사끼리 각종 서비스나 정보를 주고 받는 경우도 있다고 했다.

그런데, 이 회사와 회사끼리 주고받는 정보또한 인터넷으로 풀리게 되는데, 인터넷이 중요한 정보를 책임지고 안전하게 전송해줄 것이란 보장이 없다. 그치만 사설 망의 정보를 다른 사설 망으로 정보를 보내려고 한다면 공용 망을 무조건 통과해야 한다는 딜레마가 생긴다. 이에 나온 기술이 VPN이다.

 

VPN은 공용 망을 사설 망처럼 이용하여 네트워크를 안전하게 연결하기 위한 통신 터널을 구축하는 기술이다.

그럼 어떻게 암호화를 시키느냐? 캡슐화를 통해서 이를 진행한다. 바로 암호화 Header를 따로 또 추가하는 것.

VPN이 관여할 수 있는 계층은 2,3,4,5 계층으로, 사실상 네트워크에 올라가는 모든 트래픽은 적용 가능하다고 보면 된다.

주로 사용하는 암호화는 2가지인데, IPSec과 SSL을 주로 사용한다.

통상적으로 정보의 이동끼리는 IPSec을 사용하는 편이며, 원격 접속/조종이 필요하면 SSL을 사용하는 편이다.

 

 

통합 위협 관리 시스템, UTM(Universal Threat Management)

위에 소개한 장비들을 모두 설치하고 구축한다면 어마어마한 돈과 시간을 투자해야한다.

대기업같은 곳에서는 문제없이 구축하겠으나, 트래픽도 많이 안들어오는 조그마한 기업이나 학교같은 곳에서 저걸 구축할 필요가 있을까? 심하게 낭비일 것이다.

때문에 위의 저 모든 기능들을 하나로 압축해서 만들어놓은 장비가 바로 UTM장비다.

 

물론 성능은 직접 구축보다 많이 떨어지지만, 네트워크가 간단해져서 두자 비용은 줄고 관리가 쉬워지는 장점이 있다.

보통 중소규모의 네트워크를 중심으로 많이 적용되고 있는 장비다.

 

 

NSM 실습

위에서 배운 내용을 토대로 NIDS를 구축하고 모니터링하는 실습을 진행해보자.

 

Security Onion

리눅스 기반 장비로, 네트워크 보안 모니터링(NSM)과 침입탐지시스템(IDS) 역할을 수행한다. 여기서, NSM은 IDS 기능이 전부 들어가있는 제품이다.

Security Onion은 오픈소스로 제공되는 NSM으로, 침입 탐지 테스트를 위한 교육용 또는 소규모 네트워크 감시로 적합하다.

위는 Security Onion의 구조로, IDS 엔진과 수집 도구를 여러 종류를 사용하고 있는 것을 확인할 수 있다.

IDS 엔진에서, Snort와 Bro는 NIDS 기반 엔진, OSSEC는 HIDS 기반 엔진이고, Snort는 시그니처 기반, Bro는 통계 기반 엔진이다.

Snort, Bro, OSSEC가 분석한 내용을 종합하여 Sguil이 GUI로 보여주게 된다.

 

Security Onion을 설치하면 아마 이런 화면이 보일 것이다.

다만 설치만 되어있고 보안 솔루션 및 도구들은 설치가 되어있지 않았다.

Setup을 눌러 설치를 시작하자

 

화면에 /etc/network/interfaces를 설정할 것인지를 물어보고 있다.

여기는 가상환경 내고, 서버 설정도 이미 끝났기 때문에 구성할 필요가 없다.

No를 고르자

우리는 세부적으로 설정할 것이므로 Production으로 선택한다.

서버 안에 Server와 Sensor을 전부 둘 것이기 때문에 Standalone을 고른다.

Sguil에 사용할 ID와 비밀번호를 입력하라는 창이다.

기존에 사용한 것과 똑같이 입력하자

비밀번호도 알맞게 넣어준다.

Sguil에 데이터를 얼마나 보관할 것인지 물어보는 창이다.

초기 값 그대로 30일 동안 보관으로 설정하자.

Sguil 데이터의 내용 수정 기간을 정하는 창이다.

초기 값 그대로 설정할 것으로, 7일간은 수정가능, 30일 동안은 보관으로 설정한다.

IDS엔진을 고르는 창인데, Snort를 사용할 것이다.

IDS 엔진이 사용할 룰 셋을 고르는 창이다.

맨 위의 룰 셋은 무료지만, 아래 3개는 유료/제한 걸린 룰 셋이다. 룰 셋도 돈받고 파는 이상한 세상이 되었다.

한번에 수집할 수 있는 패킷 갯수를 물어보는 창이다.

이 또한 기본값을 사용할 것이다.

Snort를 IDS 엔진으로 사용할 것이냐를 물어보고 있다.

이럴려고 설치한 Security Onion이므로, YES를 고른다.

동적 탐지인 Bro도 사용할 것이냐 물어보는 창이다.

대충 설치만 하자

트래픽 압축을 할 것이냐 물어보는 창이다.

압축하면 귀찮은 과정이 많아지므로, 넘기자.

http agent를 사용할 것이냐고 물어보고 있다. ELSA같은 에이전트를 쓰면 Bro와 연동해야하기 때문.

NO를 고른다.

수집 도구인 Argus를 설치할 것이냐 물어보고 있다.

설정하기 귀찮으니 NO를 고른다.

나머지 설정도 NO를 고른다.

이건 YES를 고른다.

Salt 보안을 사용하는지를 물어보고 있다. YES를 고른다.

ELSA 설치하느냐를 물어보는 창이다. NO를 고르자.

마지막으로 설정을 확인하는 창이다. 확인하고 YES를 고르자.

 

설치가 끝나면 Sguil로 접속하자

접속하게 되면, 모니터링 할 네트워크를 고르라는 창이 뜨는데, 왼쪽은 NIDS, 오른쪽은 HIDS이다.

둘다 보자.

정상적으로 실행되는 것을 확인할 수 있다.

 

시스템이 정상적으로 실행 되는 것을 확인했으니

탐지를 정상적으로 수행하는지 확인할 차례다.

 

/etc/nsm/rules로 이동하여 기본적으로 있는 룰을 확인해보자.

여기에 우리는 새 룰을 추가하여 Snort이 탐지, Sguil에 표시하도록 만들 것이다.

 

 

Snort Rule

Snort 룰은 기본적으로 규칙 헤더와 규칙 옵션으로 나뉘며, 규칙 헤더는 프로토콜과 트래픽의 흐름 방향을, 규칙 옵션은 규칙의 종류와 규칙의 세부적인 룰을 규명하는 옵션이다.

규칙 헤더에서 일치된 룰은 규칙 옵션과 비교하게 된다. 규칙 옵션과도 일치하는 룰이라면, 그 때 Action에 의해 행동하는 것이다.

 

Action에는 여러가지 종류가 있는데,

- alert : 경고와 로그를 같이 발생한다.

- log : 로그만 저장한다

- pass : 패킷을 무시한다

- active : 경고를 발생시킨 다음 동적 규칙을 활성화 한다.

동적 규칙에는 또 여러 규칙이 있다.

- drop : 패킷을 차단 한 후 로그로 저장한다.

- reject : TCP의 경우, 차단 후 로그 저장. 세션을 리셋한다. UDP의 경우, 차단 및 로그 저장 후 ICMP port unreachable 메시지를 전송한다.

- sdrop : 패킷을 차단하지만 로그로 저장하지 않는다.

 

Protocol에는 다음의 4가지 종류가 있다.

- tcp : TCP 프로토콜에 적용

- udp : UDP 프로토콜에 적용

- icmp : ICMP 프로토콜에 적용

- ip : IP 프로토콜에 적용

 

IPPort에는 다음을 적용한다.

 

 

규칙 옵션은 규칙 헤더에 해당하는 패킷 중 특정 패턴(시그니처)을 정의해 놓은 영역으로,

일반 옵션, 흐름 옵션, 페이로드, HTTP 관련 옵션 등 여러 옵션이 존재한다.

옵션들은 ;(세미콜론)으로 구분한다.

 

일반 옵션은 규칙에 대한 정보를 제공하는 옵션으로, 검색하는 동안에는 어떠한 영향도 미치지 않지만, 규칙끼리의 제어 및 태깅을 위한 옵션이다.

 

페이로드 옵션은 악성 패킷을 탐지하는 직접적인 옵션으로, Snort 룰에서 가장 중요한 부분이다.

페이로드에는 두 가지 필드만 존재한다. Content와 Pcre인데, 대충 처리하고 싶으면 Content, 좀 더 정밀하게 처리하고 싶으면 pcre 옵션을 사용한다.

예를 들어,

문자열 지정을 하고 싶다면, content : "administrator";

숫자 지정을 하고 싶다면, content : "|121212|";

정규표현식 지정을 하고 싶다면, pcre : "/^select/";

 

한번 실습해보자.

Kali(10.10)가 Meta(10.20)에게 공격을 하고, 그걸 IDS(10.100)이 잡아내는 것을 할 것이다.

 

Kali는 Meta의 시스템에 접근해 정보를 빼내고 싶은데, Meta 관리자 ID의 비밀번호를 모르는 상황이다.

비밀번호를 알아내기 위해 Kali는 패스워드 크래킹을 시도할 것이다.

telnet으로 kali가 Meta에 접근한다.

아이디와 비밀번호를 모르는 Kali는 계속 로그인을 시도한다.

이 때의 트래픽을 확인해보면

주고 받은 데이터가 그대로 Telnet 항목에 노출되어 있는것을 확인할 수 있다.

즉, Kali가 Meta에게 로그인을 실패하면, Meta가 Kali에게 "Login incorrect" 메시지를 전송한다.

가상환경은 전부 허브로 묶여있기 때문에, Meta가 Kali에게 보내는 정보는 IDS또한 받게 된다.

그렇다면, 이 "Login incorrect"가 IDS로 들어온다면, 누군가 시스템에 접근하고 있다는 것이다.

 

이를 기반으로 룰을 만들어보자

1번 룰은 Meta(10.20)가 kali(10.10)에게 "Login incorrect" 메시지를 전송할 시 알람과 로그를 남기라는 룰이다.

2번 룰은 Meta(10.20)가 어디로든 "Login incorrect" 메시지를 전송할 시 알람과 로그를 남기라는 룰이다.

어느 것을 쓸지는 취향.

 

이제 룰을 적용시켜보자.

IDS장비의 /etc/nsm/rules 안의 local.rules에 적용할 룰을 적는다.

저장 후 만든 룰을 적용시켜보자

rule-update로 반영이 된 것을 볼 수 있다. 우하단에 OK가 4개가 생긴것을 확인할 수 있는데, OK가 2개 혹은 3개만 뜬다면, 입력한 룰에 뭔가 문법적인 오류가 있었다는 것을 알려주는 것이다.

룰에 오류가 있어서 Snort까지 멈춘 상황. 때문에 룰을 고친 후에,

#nsm –sensor –restart –only-snort-alert 명령어로 Snort를 재실행 한 후,

#rule-update로 다시 룰을 적용시켜야한다.

 

룰을 적용시켰으니, kali에서 다시 로그인을 시도해보자

로그인을 여러번 틀려준다

그럼 설정한 룰과 함께 Telnet Fail이 잡혀있는 것을 확인할 수 있다.

 

우리가 설정한 룰은 패스워드 입력이 틀리면, 바로 alert를 울리도록 설정하였다.

근데 단순하게 비밀번호 입력 틀렸다고 로그 남기면, 오탐의 가능성이 매우 높다.

때문에 일반적인 패스워드 오입력과 악의적인 패스워드 크래킹을 구분할 방법을 생각해야한다.

이럴 때 사용하는 것이 threshold 옵션이다. threshold 옵션은 동일한 특정 패킷이 정한 시간동안 일정 갯수 이상 발견이 되면 조건을 충족했다고 설정하는 옵션이다.

사실 이와 비슷한 옵션은 몇개가 더 있다. 다만 세세한 차이가 있는데, 로그를 찍는 기준으로 옵션이 나뉜다.

threshold는 패킷량을 기준으로 로그를 찍는다. 따라서 찍힌 로그는 패킷량과 동일하다.

limit은 임계시간을 기준으로 로그를 찍는다. 따라서 찍힌 로그는 조건을 만족한 임계 시간마다 1개씩 찍힌다.

both는 IP를 기준으로 로그를 찍는다. 따라서 찍힌 로그는 조건을 만족했다면 그냥 1개만 찍힌다.

 

 

'실더스 루키즈 교육' 카테고리의 다른 글

15. 웹 쉘  (0) 2023.12.15
14. GoogleDork  (0) 2023.12.14
12. Port Scan과 Spoofing, DDoS  (0) 2023.12.08
11. 실습용 Network 구축  (0) 2023.12.07
10. MTU/MSS, ICMP 개요  (0) 2023.12.06