본문 바로가기

Rookies 9기/시스템 네트워크보안

시스템/네트워크 보안 7일차

728x90

복습

• 로그 분석

- 로그는 시스템마다 다르다.

- DNS로그는 구분자를 [**]를 사용 때문에 awk로 읽어 들이려면 [**]를 삭제해야 한다.( awk는 공백을 구분자로 사용)

- [**] 를 제거하려면 sed 's///g'을 사용하면 된다. => sed 's/\[\*\*\]//g' 

- 두번에 걸쳐 삭제하기 : [**]를 |로 치환했다가 |를 삭제하기  => sed 's/\[\*\*\]/|/g'  | awk -F"|" 'print {$3,$4}'

dv_access.log 분석하기

구분자는 공백을 사용했다. 

192.168.5.1 - - [08/Jul/2021:04:09:30 -0400] "GET /mutillidae/images/backtrack-4-r2-logo-90-69.png HTTP/1.1" 200 1444 "http://192.168.5.136/mutillidae/" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
POST로 시작하는 로그를 골라서 어떤 페이지를 요청했는지 확인하려면? (URL은 $11에 위치해 있다.)

{"originWidth":874,"originHeight":569,"style":"alignCenter","caption":"cat dv_access.log

※ grep 명령어
리눅스에서 grep 명령어는 특정 파일에서 지정한 문자열이나 정규표현식을 포함한 행을 출력해주는 명령어이다.

 

위 결과에서 중복을 제거하고 어떤 URL($11)에 누가($1) 그랬는지 확인

 

1_merge_total.arg 파일에서 출IP, 출 Port, 목IP, 목Port 를 추출해보세요.

ra  -nzr  1_merged_total.arg  -s  saddr,daddr,sport,dport

-s를 사용해서 출발지 IP는 saddr,  목적지 Ip는 daddr,  출발지 Port는 sport,  목적지 Port는 dport으로 설정을 해주고 awk로는 위치만 조정을 했다.

 

2_dns.log 파일에서 [**]를 제거하고, Response와 A인 것을 골라서, URL과 IP만 상위 30개 추출해보기

 

오늘 배운 내용

• DRM(Digital Rights Mangement : 디지털 권한 관리)

- 전자문서(설계도) 및 파일에 대한 권한( 읽기, 쓰기, 수정, 복사, 삭제, 출력)을 관리하는 솔루션

- 자동차, 조선소, 반도체 등 제조사들은 설계도를 보호하기 위해서 DRM을 PC나 Smart Phone에 설치해서 유출 방지

 

•DLP(Data Loss Prevention) = PTS(개인정보 보호 시스템)

- 개인정보가 유출되지 않도록 해주는 도구

- 주민번호 2개 이상 유출 차단을 설정하면 USB, 웹 업로드, 이메일 등 복사될 때 차단(기록에 남는다.)

- 전화번호 10개 이상 유출 차단을 설정하면 보내려는 시도를 할 때 차단

 

•PTS(개인정보 보호 시스템)

- PC에 설치하면 개인정보를 보관한 파일이 있는지 검색 ---> 경고를 보낸다.

 

※ 용어 정리

- Intrusion Blocking System (IBS) : 침입 차단 시스템 = 인터넷 방화벽(Firewall)       
- Intrusion Detection System (IDS) : 침입 탐지 시스템
- Intrusion Prevention System (IPS) : 침입 예방 시스템 (FW+IDS+추가)

 

• 방화벽

- 단일 제품(Appliance)으로 판매되는 경우 : Trusguard 등 

- 여러 종류의 조합을 방화벽이라고도 함

‣ Screen Router : 라우터에 ACL을 적용해서 패킷의 흐름을 허용 또는 거부 하는 기능을 활성화하면 "스크린 라우터"라고 함

‣ Bastion Host : 데이터 부분을 조사해서 서비스에 허용 또는 거부할 것인지를 결정하는 컴퓨터(Proxy에서 주로 이런 역할을 함) ---> 방어의 핵심이 되는 호스트이므로, 어떠한 서비스도 해서는 안되고 계정의 최소화

 

• 방화벽의 종류(세대별 구분)

‣ 1세대 (Packet Filtering )

- 규칙을 만들어서 패킷을 허용하거나 거부

- 정책에 따라 규칙을 만든다 (Policing) : 근무시간에 암호화폐 거래소, 증권회사, 게임사이트 방문 금지 가능

- IP주소(L3)와 Port번호(L4)를 기준으로 결정하니까 속도가 빠름

-단점 : 악성코드가 포함된 데이터 부분을 볼 수 없음 (xss, sqli, rat 등을 막기 어려움)

 

‣ 2세대 ( Application Level Firewall , Application Proxy)

- 패킷의 데이터 부분까지 조사해서 허용 또는 거부 결정 (주로 7 계층 헤더의 요청이 올바른지 판단)

- 서비스마다 데몬이 따로 존재(단점 : 7 계층을 보다 보니 속도가 느림)

- 장점 : 세부적인 통제 가능(다운로드는 가능한데 업로드는 안되게 할 수 있다)

 

‣ 3세대 (Stateful Packet Inspection(SPI))

- 상태 기반 방화벽

- 상태를 저장한 테이블을 운영해서 트래픽의 상태를 조사해 허용 또는 거부를 결정

- 주로 3 계층 정보를 기반으로 상태 테이블(State Table)에 기록하고 참고해서 허용 또는 거부 결정 ---> 속도 빠르면서도 안전

 

‣ 4세대 (Dynamic Packet Filter)

- 2세대와 3세대의 조합으로 규칙을 실시간으로 수정할 수 있음 => 악성코드를 계속 보내는 IP를 스스로 차단하는 기능

 

• SmartConsole(Firewall Client) 실습

 

- Smart Dashboard : 방화벽 설정 도구

- Smart View Tracker : 로그 확인

- Smart View Status : 상태 확인 도구 

 

• 방화벽 규칙 집합

처음 화면

- 위에서부터 내려가면서 적용

- 숫자가 작을수록 운선순위가 높음

- 가장 아랫줄에 있는 조건은 위의 조건들이 모두 해당되지 않을 때 적용

 

방화벽 규칙 집합 작성 방법 ⭐⭐⭐

1) 맨 아랫줄에 모두 거부를 배치함 --> 기본적으로 모두 거부(Deny-all policy)

2) 최소한 하나의 허용이 필요함 (허용이 하나도 없으면 선을 뽑으면 됨)

3) 작은 규칙은 큰 규칙의 위에 배치해야 함 ---> 위에서부터 적용하기 때문에 큰 규칙이 위에 있으면 작은 규칙이 무려화됨

4) 자주 참조될수록 위에 배치 (Web Server > Mail Server > SSH ) : 효율성을 고려함

※ 방화벽 규칙은 공식적인 방식 (신청서 및 관리자 승인)을 통해서만 요청할 수 있음

 

방화벽 규칙 기본기

저 아이콘을 통해 규칙 테이블을 만들 수 있다.

방화벽 규칙 기본기

왼쪽에서 찾아 테이블 칸을 채울 수 있다.

방화벽 규칙 기본기

• Mail Server의 동작

※ 메일서버에서 Office로 못들어온다 그래서 메일을 확인을 하려면 Mail Server로 이동해서 확인을 할 수 있다.

 

Internal-net 직원들이 근무시간(09:00~18:00)에 게임사이트에 접속을 못하도록 차단하시오.
게임사이트 IP 주소 : 52.78.153.209   52.78.145.30

Nodes에서 추가할 HOST을 만들어준다. 

두 개의 호스트를 만들었다.

두개의 호스트를 근무시간에 접속을 하지 못하도록 설정을 해준다. 

두개의 호스트를 목적지 칸에 넣는다.(두 개의 호스트에 들어오는 건 차단)

Quiz) 회사들이 방화벽 규칙을 평균 몇줄로 관리할까요?
1) 50~100
2) 100~200 : 방화벽 업체 권장
3) 200~400
4) 400~600 : 현실 -----> 속도가 느려짐...
• Security(Packet Filter) : IP주소와 Port번호를 중심으로 차단 또는 허용 --> 1차 방어
• Smart Defense : 7계층 서비스의 데이터 부분을 탐지(IDS와 유사)하거나 개수를 셈(몇까지 허용)하는 기능이 있음 --> 2차 방어

 

• IDS

- 침입을 탐지하는 장치

- 네트워크 주요 구간에 배치하는 방법 ---> Network 기반 IDS (NIDS) : HW + OS + SW = Appliance (독립실행형)

- 주요 서버에 설치하는 방법 --> Host기반 IDS (HIDS) : SW방식으로 웹서버 또는 메일서버 또는 DB서버 등에 설치

 

•침입탐지 원리⭐⭐⭐

‣ 오용 탐지(Misuse)

- 패턴을 모아놓은 Database가 필요함 --> Signature DB라고 함(서명 기반, 지식기반)

- 공격명령이나 악성코드/악성 스크립트 등이 들어오면 Signature DB 패턴을 비교해서 일치하면 관리자에게 알려준다(Alarm)

- 패킷의 데이터 부분과 시그니처를 비교 : 패턴 매칭(Pattern Matching)

- 특징 : 오탐이 적고 미탐이 있을수 있음 (패턴이 저장되어 있지 않으면 탐지되지 않는다)

- 반드시 업데이트 계약을 맺고 새로운 패턴을 주기적으로 추가해야 함

 

‣ 이상 탐지 (Anomaly)

- 평소와 다른 트래픽(행위 기반)을 찾아내서 관리자에게 알려주는 것 : 이상한 행위를 찾아냄 ---> 이상 탐지

- 약 2주간의 트래픽을 모아서 평균을 계산하고, 허용 범위를 설정함 ---> 기준점이 됨

- 임계값(허용 범위)을 벗어나면 이상행위로 보고 관리자에게 알려줌

- 특징 : 너무 알람이 많으면 알람을 무시하게 됨 ---> 진짜로 공격이 발생되어도 놓치게 될 우려가 있음

- 미탐이 적은 편이지만, 오탐이 많을 수 있음 (오용 탐지에서 놓친 공격을 탐지할 가능성이 있음)

- 최근에는 평균점에 새로운 트래픽을 반영하는 방식을 사용(신경망 기법)하고 스스로 학습을 시켜서 정확도를 높임(머신 러닝)

 

• 대표적인 IDS가 있음 (SW는 대부분 OpenSource이므로 무료로 배포, 패턴은 지식이라서 유로로 배포)
-Snort
-Argus
-Suricata

 

•Snort 패턴 실습

snort3-community.rules

- alert : 관리자에게 알려줌

- $HOME_NET   :  홈네트워크 지정 (Snort 설치 시 HOME_NET 지정) : 내부망

- 2589 : 백도어가 사용하는 포트

- msg:"            "      -----> 관리자의 알람 창에 뜨는 내용

- flow : 방향

- content: "                    "     -----> 패턴 부분 (일치하면 관리자에게 알려줌)

- pcre : 정규화식

 

• 맨 아래에서 두번째
alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS ( msg:"SERVER-OTHER Apache Log4j logging remote code execution attempt"; flow:to_server,established; http_cookie; content:"${",fast_pattern,nocase; http_uri; content:"|2F|"; http_cookie; pcre:"/\x24\x7b(jndi|[^\x7d\x80-\xff]*?\x24\x7b[^\x7d]*?\x3a[^\x7d]*?\x7d)/i"; metadata:policy balanced-ips drop,policy connectivity-ips drop,policy max-detect-ips drop,policy security-ips drop,ruleset community; service:http; reference:cve,2021-44228; reference:cve,2021-44832; reference:cve,2021-45046; reference:cve,2021-45105; classtype:attempted-user; sid:300061; rev:1; )

정규표현식(pcre) 패턴을 활용해서 log4j공격 시도

정규표현식 분석을 해보자

1. /\x24\x7b(jndi|[^\x7d\x80-\xff]*?\x24\x7b [^\x7d]*?\x3a [^\x7d]*?\x7d)/i    //i는 대소문자를 구분하지 않는다는 의미

2. /24 7b(jndi|[^ 7d 80- ff]*? 24 7b[^ 7d]*? 3a[^ 7d]*? 7d)/i                        // \x는 hex 구분자이기 때문에 제거를 한다. 

 

• 트로이 목마 사례
alert tcp $HOME_NET any -> $EXTERNAL_NET any ( msg:"MALWARE-CNC Win.Trojan.BlackRAT variant outbound connection"; flow:to_server,established; content:"ProClient.Data",fast_pattern,nocase; content:"Clientx|2C 20|Version=",nocase; content:"data|05|bytes",nocase; metadata:impact_flag red,policy balanced-ips drop,policy max-detect-ips drop,policy security-ips drop,ruleset community; reference:url,www.virustotal.com/gui/file/6610e632758a0ae2ab9b259fe1f83236aff6b5bd485c3d4e3fd4995be68535bf/detection; classtype:trojan-activity; sid:51532; rev:1; )

$HOME_NET any -> $EXTERNAL_NET any :내부망에서 외부망로 들어왔다.

outbound connection : 홈네트워크에서 인터넷으로 나가는 트래픽이다

ProClient.Data Clientx|2C 20|Version= data|05|bytes : 이러한 패턴들을 가지고 있다.

6610e632758a0ae2ab9b259fe1f83236aff6b5bd485c3d4e3fd4995be68535bf : 악성파일의 해시값이다.

www.virustotal.comAnti-Virus업계의 포털 사이트

 

• Suricata 설치방법

규칙들 확인

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:oisf/suricata-stable
$ sudo apt update
$ sudo apt install suricata
$ sudo suricata-update
$ cd /etc/suricata/rules/