클라우드 컴퓨팅 개요 및 특징
1) 개요
- 집적, 공유된 정보통신기기, 정보통신기기, 정보통신설비 등 정보통신자원을 이용자의 요구나 수요 변화에 따라 정보통신망을 통해 유동적으로 이용할 수 있도록 하는 정보처리체계
- 네트워크를 통해 이용자가 IT자원을 필요한 만큼 빌려서 사용하고, 서비스 부하에 따라 실시간 확장성을 지원받으며 사용한 만큼 비용을 지불하는 컴퓨팅 환경
2) 특징
- IT자원을 이용자가 직접 소유(On Premise)하여 운영관리하던 방식과 달리, 이용자가 필요한 만큼의 자원을 가상화된 형태로 네트워크를 통해 제공받는 방식의 서비스
- 가상화Virtualization : 클라우드 컴퓨팅의 핵심기술. 물리적인 IT자원을 동시에 다수의 논리적인 IT자원으로 사용할 수 있는 기술
- 데스크톱 가상화 (다양한 os 환경을 가상화 기술을 통해 이용)
- 어플리케이션 가상화 (중앙의 가상화 서버를 통해 제공)
- 서버 가상화 (물리적인 다수의 서버를 가상 서버로 통합해 필요한 서버로 재생성하고 할당)
- 스토리지 가상화 (개별 스토리지를 통합하여 가상 스토리지를 만들고 재할당)
- 네트워크 가상화 (네트워크 리소스를 논리적 요소로 구축하고 관리하는 기술)
클라우드 컴퓨팅 분류
1) 개요
- 이용자가 컴퓨팅 서비스에 접근할 수 있는 서비스 모델과 구현방식에 따른 분류인 배치 모델로 구분
2) 서비스 모델 Delivery Model
가) Iaas (이아스, Infrastructure as a Service)
- 서버, 스토리지 등 하드웨어 인프라 자원만을 사용량 기반으로 제공하는 서비스
- 가상화 기술을 통해 가상화된 환경에서 쉽고 신속하게 할당받아 사용 가능
(ex 아마존 웹 서비스AWS의 S3/EC2)
나) PaaS (파스, Platform as a Service)
- 운영체제, 개발환경 플랫폼, 개발 언어 프레임워크 등을 제공하는 서비스
(ex MS Azure, Goole AppEngine)
다) SaaS (싸스, Software as Service)
- 클라우드 환경에서 동작하는 어플리케이션/소프트웨어를 제공하는 서비스
(ex 네이버 N클라우드, 구글 드라이브)
3) 배치 모델 Deployment Model
가) 퍼블릭Public 클라우드 모델
- 불특정 다수를 대상으로 하는 서비스. 여러 서비스 사용자가 이용하는 형태.
- 비용이 적지만, 커스터마이징 유연성은 제한점이 있다
나) 프라이빗private 클라우드 모델
- 기업 및 기관 내부에 클라우드 솔루션을 이용해 클라우드 서비스 환경을 구축, 내부자에게 제한적으로 서비스 제공
- 커스터마이징 유연성은 높으나 초기 도입 비용/구축시간이 크다
다) 하이브리드hybrid 클라우드 모델
- 퍼블릭 클라우드와 프라이빗 클라우드가 결합된 형태. 공유를 원하지 않는 일부 데이터 및 서비스에 대해서 프라이빗 정책을 설정.
클라우드 기반 보안 서비스 : SecaaS (세카스)
개요
1) Security as a Service. SaaS의 한 종류로, 클라우드 기반 보안 / 보안 클라우드라고 불림
2) 클라우드를 통해 주문형(On Demand) 방식으로 제공하는 보안 서비스 모델
(클라우드를 통해 기존 IT 환경(On Premise)의 인프라 및 서비스에 대한 정보보호 서비스를 제공)
3) 필요한 만큼의 보안 서비스를 이용하고 요금을 지불하는 방식
특징
1) 초기 투자비용 없이 클라우드를 통해 보안 서비스 이용
2) 서비스를 사용한 만큼 비용을 지불
3) 전문가 집단의 보안 서비스를 제공 받음으로써 보안 강화 / 핵심 역량에 집중 가능
보안 서비스 분야 : 클라우드 보안 연합 (CSA : Cloud Security Alliance) 정의
1) 식별/접근관리 (IAM : Identify and Access Management) : 인증, 신원보증, 정보 접근 권한이 있는 사용자 관리
2) 데이터 유출/손실 방지 (DLP : Data Loss Prevention) : 데이터의 보안 및 모니터링, 보안검증
3) 웹 보안 (Web Security) : 웹 트래픽을 프록시 처리하여 보호
4) 이메일 보안 (email security) : 인바운드 및 아웃바운드 email 제어, 스팸으로부터 보호
5) 보안 감사 (security assessments) : 업계표준을 기반으로 제3자 감사
6) 침입 관리 (intrusion management) : 패턴 인식을 통한 통계적 이벤트 감지, 탐지 등
7) 보안정보 및 이벤트 관리 (SIEM: Security Information & Event Management) : 보안로그 및 이벤트 정보 실시간 분석
8) 암호화 (Encryption) : 데이터 암호화
9) 업무 연속성과 재난 복구 (BCDR: Business Continuity and Disaster Recovery) : 서비스 중단시 운영의 탄력성 보장
10) 취약점 검사 (Vulnerability Scannung) : 공용 네트워크를 통해 대상 인프라 또는 시스템 취약점 검사
11) 지속적인 모니터링 (Continuous Monitoring) : 현재 보안 상태를 나타내는 지속적인 위험관리 기능
클라우드 컴퓨팅 보안 END --
침입탐지 시스템snort
1) 개요
- Sniffer and More에서 유래됨. 네트워크 트래픽을 더 많이 감시하고 분석한다는 의미
- 패킷 스니퍼 : 패킷을 스니핑해서 보여줌
- 패킷 로거 : 모니터링한 패킷을 저장하고 로그에 남김
- 네트워크 IDS/IPS : 트래픽을 분석하여 공격을 탐지/차단
(블로그 포스팅 참조 https://blog.alyac.co.kr/1002
Struts2 원격코드실행 취약점 CVE-2017-5638, S2-045
POC (Proof Of Concept)
snort탐지패턴
영향받은 버전 ... )
2) snort rule 설정
- snort 룰(rule)/시그너처(signature)는 헤더와 바디(옵션)로 구성
- 헤더부분은 처리방식, 프로토콜, ip주소 등 처리할 패킷을 판단하는 기준
- 바디부분은 패킷을 탐지하기 위한 규칙
룰 헤더(header) 설정
가) 형식
1. Rule Actions : 패킷이 참지되었을 때 처리방식
2. Protocols : 탐지할 프로토콜.
3. IP Address : 출발지/목적지
- any : 모든 IP를 의미
4. Port Numbers : 출발지/목적지 port
5. Direction Operator : 방향 지시자 (->단방향, <>양방향)
나) Rule Actions 유형
1. alert : 선택한 alert 방식을 이용해 alert를 발생시키고 패킷을 로그에 남김
2. log : 패킷을 로그에 남김
3. pass : 패킷 무시
4. activate : alert 발생, 대응하는 dynamic rule 활성화
5. dynamic : activate rule에 의해 활성화. log rule과 동일하게 동작
6. drop : 패킷을 차단하고 로그에 남김
7. reject : 패킷을 차단하고 로그에 남긴뒤 TCP면 TCP Reset 또는 UDP면 ICMP port unreachable 전송
8. sdrop : 패킷을 차단하지만 로그에 남기지 않음(slient)
(실무에서 1번을 주로 사용, IPS 모드일 경우 6 7 8
최근에는 네트워크 포렌식 장비를 이용하는 추세)
설정 예
1. 단방향 예
action | protocol | ip address | port | direction | ip address | port |
alert | tcp | any | any | -> | 192.168.11.0/24 | 80 |
=> 탐지시 alert 발생후 패킷에 로그를 남김. 모든 ip의 모든 포트에서 192.168.11.0/24 대역 80포트로 들어오는 패킷을 탐지한다.
2. 양방향 예
action | protocol | ip address | port | direction | ip address | port |
log | tcp | $EXTERNAL_NET | any | <> | $HOME_NET | 80 |
=> 패킷을 로그에 남긴다. $EXTERNAL_NET는 외부 네트워크(보통 any), $HOME_NET는 내부 네트워크 의미. 둘 다 snort 설정파일(snort.conf)에 정의된 환경변수이다.
** 룰 바디 설정 : 일반옵션 설정
옵션 | 설명 |
msg | alert 발생시 이벤트 이름으로 사용된다. |
reference | rule과 관련된 외부 취약점 정보 참조시 사용됨 |
sid | snort rule id - 99 이하 : 시스템에 예약된 id - 100 ~ 1,000,000 이하 : snort에서 배포하는 룰셋에서 사용하는 sid - 1,000,000 이상 : 사용자 정의 rule에서 사용하는 sid |
classtype | 공격 유형과 기본 우선순위(위험도)를 정의해 놓음 1(높음) 2(중간) 3(낮음) |
priority | classtype보다 우선하여 덮어쓸 수 있는 우선순위(위험도) |
rev | rule 버전번호. 수정revsion 횟수를 표기함. |
rule 설정 및 탐지 시 alert 메시지 예시
[**] [1:1000310:3] [CVE-2024-6214]Bash Vulnerability Requested header [**]
| | |
sid rev(수정횟수) msg (alert 발생시 이벤트명)
[Classification: access to a potentially vulnerable web application] [Priority: 10]
| |
classtype (유형정보) priority (rule 우선순위 (위험도))
02/20-01:54:00. 164774 10.10.10.10:45451 -> 10.10.10.20:80
TCP TTL:44 TOS:0x0 ID:55555 iPlen: ... 중략
***AP*** Seq : 0x50788708 ... 중략
TCP Opions(3) => NOP NOP ... 하략
|
탐지된 패킷의 헤더 정보
[Xref => http://cve.mitre.org......... 하략 ]
|
reference (rule과 관련된 취약점 정보)
룰 바디 설정 : 페이로드 Payload/범위 관련 옵션
가) 페이로드 검사할 범위 옵션
Action | 설명 |
content | - 페이로드에서 검사할 문자열 지정 - content는 text 형식일 수도 있고 binary 형식일 수도 있고 두 개가 복합될 수도 있다 - text 형식 : content:"pattern" - binary 형식 : content:|FF FF| 파이프 기호 사이에 헥사값 표현 - ! (부정연산자: : content! : "pattern" 해당 pattern 문자열이 없는지 검사 - 특수문자 (; \ ' 3개는 치환해서 사용) |
uricontent | HTTP 클라이언트 요청 URI 정보를 검사할 문자열 |
offset | 페이로드에서 content 패턴을 검사할 시작위치 (첫 번재 바이트위치는 0) |
depth | offset부터 몇 바이트까지 검사할 것인지 지정 |
distance | 이전 content 패턴에 매치된 경우, 매치된 바이트부터 몇 바이트 떨어진 위치에서 다음 content를 검사할 것인지 지정 |
within | 이전 content 패턴에 매치된 경우, distance 부터 몇 바이트 범위 내에서 다음 content를 검사할 것인지 지정 |
nocase | 페이로드 검사시 대소문자를 구분하지 않음 |
나) content 옵션의 text, binary, text+binary 데이터 설정 테스트 (local.rule)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] text";
content : "/etc/passwd"; nocase; sid:1000011;)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] binary";
content : "|2f 65 74 63 2f 70 61 73 73 77 64|"; nocase; sid:1000012;)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] binary + text";
content : "|2f 65 74 63 2f|passwd"; nocase; sid:1000013;)
다) offert, depth 옵션 테스트
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] offset";
content : "234"; offset:2; nocase; sid:1000014;)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] offset depth";
content : "234"; offset:2; depth:4; nocase; sid:1000015;)
* 검사할 패턴 : content:"234"
* offset만 있을 때 : offset(2)+1 = 3번째 바이트부터 234 문자열이 있는지 검사
* offset과 depth가 있을 때 : offset(2)+1 = 3번째 바이트부터 depth인 4바이트 내에 234 문자열이 있는지 검사
* 검사할 바이트가 "TEST OFFSET 234" 인 경우, offset은 "S"부터를 의미, depth는 "ST OF"를 의미
라) distance, within 옵션 테스트
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] distance";
content : "234"; offset:2; depth:4; content: "567"; distance:6; nocase; sid:1000016;)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] distance within";
content : "234"; offset:2; depth:4; content: "567"; distance:6; within:3; nocase; sid:1000017;)
* 검사할 바이트가 "TEST OFFSET234BCD TEST" 인 경우
| | | | distance 6 + within 3 = "34B" (15번째 바이트)
| | | depth의 다음 바이트부터 6번째 떨어진 위치 : "2" (12번째 바이트)
| | depth ( offset 2 + depth 4 = 6번째 바이트까지)
| offset 2 (3번째 바이트)
offset "S"
depth "ST O"
distance "2"
within "34B"
(offset과 depth가 감지되었다고 가정하고 계산)
롤 바디 : 정규표현식
\ | 특수문자 기능 제거 |
^ | ^다음에 오는 문자가 문자열의 시작 (캐럿문자) |
$ | $바로 앞의 문자가 문자열의 끝 |
. | 임의의 문자 1개 |
[] | [] 안에 지정한 문자들 중 하나와 일치 ex [abc] abc 중 하나와 일치 ex [a-zA-Z] a에서 z사이 또는 A에서 Z사이 |
[^] | [] 안에 지정한 문자들을 제외한 임의의 문자 하나와 일치 ex [^a-z] a에서 z사이 문자를 제외한 임의의 문자 하나 |
| | |앞의 문자열과 뒤에오는 문자열 중하나와 일치 ex (1|2|3|4|5) 1 2 3 4 5 중 하나 |
* | * 앞에 오는 문자가 0회 이상 나타남 |
+ | + 앞에 오는 문자가 1회 이상 나타남 |
? | ? 앞에 오는 문자가 0~1회 나타남 |
{x} | {x}앞에 오는 문자가 정확히 x회 나타남 |
{x,} | {x,}앞에 오는 문자가 x회 이상 나타남 |
{x,y} | {x,y}앞에 오는 문자가 x회 이상 y회 이하 나타남 |
pcre옵션은 슬래시/ 기호 사이에 정규표현식을 입력
pcre 옵션 테스트
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg: "[TEST] pcre 옵션";
content: "+or+"; content : "%27%3D%27"; distance:0; within:20; pcre:"/^(GET|POST)/" nocase; sid:1000018;)
=> content를 보면, [ or ]와 ['=']를 탐지하고 있다.
pcre는 GET이나 POST로 시작한다는 의미의 정규표현식
URL 인코딩 짤막복습
space 20%
" 22%
# 23%
$ 24%
%25%
' 27%
. %2E
: %3A
; %3B
< %3C
= %3D
> %3E
? %3F
보안장비운영 1 END --
룰 바디 설정 : 페이로드 HTTP 관련 옵션
가) HTTP 관련 옵션
http_method : 메소드 부분 검사
ex (alert tcp ... 중략 ... content:"GET"; http_method; nocase; sid:1000060; )
http_url : URI 부분 검사
ex (alert tcp ... 중략 ... content:"<script>"; http_url; nocase; sid:1000061; )
<script> : 쿼리스트링으로 스크립트 필터링 용도
http_header : 헤더 검사
http_cookie : 쿠키 검사http_client_body : 클라이언트 요청의 바디(POST 요청) 검사
http_stat_code : 응답의 상태코드 검사
http_stat_msg : 응답의 상태 메시지 검사
(nc -lvp 8080 리스닝 포트8080 지정해서 열겠다는 명령어)
룰 바디 설정 : Event Threshold 이벤트 제한 관련 옵션
가) 개요
- 특정 시간동안 발생되는 이벤트 수를 제한하기 위한 옵션
나) 관련 옵션
threshold type <limit|threshold|both>, track<by_src|dy_dst>, count <c>, seconds <s> ex threshold type <limit> track<by_src>, count <2>, senonds <10> |
1) type
- limit : 매 s초 동안 c번째 이벤트까지 action을 수행
(ex 매 10초동안 2번째 이벤트까지 action 수행 )
- threshold : 매 s 초 동안 c번째 이벤트마다 action 수행
(ex 매 10초동안 2번째 이벤트마다 action 수행)
- both : 매 s초동안 c번째 이벤트시 한 번 action 수행
(ex 매 10초동안 2번째 이벤트시 한 번 action 수행)
2) track
- by_src : 출발지 ip 기준으로 추적
- by_dst : 목적지 ip 기준으로 추적
3) count
4) seconds
실습
1) root 로그인 시도/성공 탐지
가) FTP root 로그인 시도 탐지
snort rule 설정
alert tcp any any -> 10.10.10.0/24 21 (msg:"FTP root user access"; content: "USER root"; nocase; sid;1000062;) |
=> tcp 포트 21번을 목적으로 하는 패킷에 대한 룰 설정
기술적 취약점 분석 평가 항목 : ftpusers 파일 설정
- ftp 서비스는 평문으로 송수신하므로, ftp 서비스 사용을 제한하거나 root 계정의 접속을 제한하여야 함
- fptusers 파일에 차단할 계정명 명시
( SFTP : SSH 기반의 FTP 22/tcp )
나) Telnet root 로그인 성공 탐지
snort rule 설정
alert tcp any any -> 10.10.10.0/24 23 (msg:"telnet root user access"; content: "login"; pcre:"/root@.*#/"; nocase; sid;1000063;) |
=> telnet 23 port (정규표현식 .*# => #이 0회이상 나타남(하나의 임의의 문자))
* 외부에서 telent, ssh 등으로 직접 로그인이 되지 않도록 root 계정의 원격 접속 제한해야 한다 (pam 모듈 설정)
온라인 패스워크 크래킹 공격 탐지
가) Telnet 로그인 Brute Force/Dictionary attack 공격 탐지
snort rule 설정
alert tcp 10.10.10.0/24 23 -> any any (msg:"telnet login brute force attack"; content: "login incorrect"; nocase; threshold:type limit, track by_dst, count 1, seconds 5; sid;1000064;) |
=> 목적지 주소 기준, 매 5초동안 1번째 이벤트까지만 alert 액션 수행
(5초에 한 번씩 로그인 실패 기록이 남는다면 공격당하는 중으로 판단될 수 있다)
(복습
limit ~번째 이벤트까지, threshold ~번째 마다, both ~번째 이벤트에 한 번만. 리밋까지쓰레마다부스한번)
ex
threshold: type threshold, track by_src, count 5, seconds 30
=> 매 30초동안 5번째 이벤트마다 action 수행, 출발지 주소 기준.
취약점 분석평가 항목 : 계정 잠금 임계값 설정
- 암호입력실패횟수를 적절하게 제한하고 공격시간을 지체시켜 유출위험을 줄인다 (pam 모듈 설정)
다) SSH 로그인 Brute Force/Dictionary attack 공격 탐지
snort rule 설정
alert tcp any any -> 10.10.10.0/24 22 (msg:"[SSH] brute force attack"; content: "|53 53 48 2d 32 2e 30|"; nocase; threshold:type both, track by_src, count 5, seconds 30; sid;1000065;) alert tcp any any -> 10.10.10.0/24 22 (msg:"[SSH] brute force attack"; content: "SSH-2.0"; nocase; threshold:type both, track by_src, count 5, seconds 30; sid;1000066;) |
=> ssh 22 port
첫 번재는 binary 기준 검사 룰이고
두 번째는 text 기준 검사 룰이다. ssh 통신시 "SSH-2.0" 문자열이 포함됨.
출발지를 기준으로, 매 30초동안 5번째 이벤트에 한 번만 action을 수행한다.
Flooding 계열 공격 탐지
가) HTTP GET Flooding 공격 탐지 (시험에 나온 예문과 비슷)
alert tcp any any -> 10.10.10.0/24 80 (msg:"HTTP Get Flooding attack"; content: "GET / HTTP/1."; depth:13; nocase; threshold:type threshold, track by_src, count 100, seconds 1; sid;1000067;) |
=> 출발지 포트를 기준으로 매 1초동안 100번째 이벤트마다 action 수행.
=> depth:13은 첫번째 바이트부터 13바이트 내에 content가 있는지 검사
나) TCP SYN Flooding 공격 탐지
alert tcp any any -> 10.10.10.0/24 80 (msg:"HTTP SYN Flooding attack"; flags:S; nocase; threshold:type threshold, track by_src, count 5, seconds 1; sid;1000068;) |
=> flags:S 로 필터링. 출발지 주소 기준으로 매 1초동안 5번째 이벤트마다 action 수행
alert 메시지
[**] [1:1000310:3] [CVE-2024-6214]Bash Vulnerability Requested header [**] [Classification: access to a potentially vulnerable web application] [Priority: 10] 02/20-01:54:00. 164774 10.10.10.10:45451 -> 10.10.10.20:80 TCP TTL:44 TOS:0x0 ID:55555 iPlen: ... 중략 ******S* Seq: 0x2EA5B15A Ack: ... 하략 <- S플래그 설정됨 UAPRSF |
다) UDP/ICMP Flooding 공격 탐지
alert udp any any -> $HOME_NET any (msg:"UDP Flooding attack"; content: "GET / HTTP/1."; depth:13; nocase; threshold:type threshold, track by_src, count 5, seconds 1; sid;1000068;) alert icmp any any -> $HOME_NET any (msg:"ICMP Flooding attack"; content: "GET / HTTP/1."; depth:13; nocase; threshold:type threshold, track by_src, count 5, seconds 1; sid;1000069;) |
=> 출발지포트 기준으로 매 1초동안 5번째 이벤트마다 action 수행. 임계치 기반의 탐지 설정.
포트 복습
7 : echo 프로토콜
20 : tcp 데이터 포트
21 : tcp 제어 포트
22 : ssh 기반 포트
23 : telnet
25 : smtp 이메일 전송
53 : tcp, udp 둘 다 DNS 도메인 네임 시스템 포트
80 : tcp, udp 둘 다 HTTP 프로토콜
110 : POP3 전자우편 가져오기
161 : SNMP - Agent
162 : SNMP - Manager
220 : IMAP3
443 : HTTPS
514 : syslog 프로토콜
SSL 관련 (암호화)
990 : FTP
992 : Telnet
993 : IMAP4
995 : POP3
비정상 패킷 탐지
개요
- RFC 문서에 정의된 프로토콜 표준에 위배되는 패킷들
- 비정상적인 패킷을 제대로 처리하지 못하는 침입탐지/방지시스템(IDS/IPS) 또는 침입차단시스템(Firewall)을 우회하기 위한 목적
- 시스템이 비정상적인 패킷을 제대로 처리하지 못해 장애나 오류가 발생하도록 하기 위한 목적
( Q. 공격자가 비정상 패킷을 보내는 이유가 무엇인가?
A. 비정상 패킷을 탐지/처리하지 못하는 침입탐지/방지시스템 또는 침입차단시스템을 우회하고, 시스템이 비정상 패킷을 처리하지 못해 오류나 장애가 나도록 하기 위한 목적 )
(ex LAND ATTACK : 출발지 주소와 목적지 주소를 희생자 주소로 변경해서 TCP SYN 패킷을 다량 전송. TCP SYN의 응답 패킷을 자기자신에게 보내면서 DoS 상태 유발 )
비정상 IP 패킷
가) 인터넷 구간의 사설 IP
- 사설 ip로 예약된 주소는 인터넷 구간에서 볼 수 없는 IP이므로 공격자에 의해 조작된 IP 주소이다
- 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
- 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
- 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16)
alert udp 10.0.0.0/8 -> $HOME_NET any (msg:"Private IP 10."; sid;1000069;) alert udp 172.16.0/12 -> $HOME_NET any (msg:"Private IP 172."; sid;1000070;) alert udp 192.168.0.0/16 -> $HOME_NET any (msg:"Private IP 192."; sid;1000071;) |
=> 사설 ip 출발주소로 들어오는 패킷들 전부 차단
나) 출발지와 목적지가 동일한 IP
alert ip any any -> $HOME_NET any (msg:"land attack"; sameip; sid;1000071;) |
=> sameip 로 출발지 목적지가 동일한 패킷을 감지할 수 있다
비정상 TCP 패킷
가) 일반적으로 정상적인 TCP 플래그 조합 (RFC 793)
1) SYN, SYN_ACK, ACK
2) 연결을 맺은 모든 패킷들은 ACK 플래그가 있음
3) FIN_ACK, ACK는 연결 종료시
4) RST_ACK는 연결 즉시 종료
5) 연결 후 송수신되는 패킷들은 ACK가 있고 필요시 PSH나 URG가 포함될 수 있음
나) SYN_FIN 플래그 조합 비정상 TCP 패킷
1) 연결설정SYN과 연결종료FIN는 동시에 설정될 수 없는 플래그이다
2) 일부 구형 보안장비들이 제대로 탐지하지 못하고 FIN 플래그를 포함한 패킷을 허용하는 경우가 있음
3) 일부 시스템은 이러한 플래그 패킷에 대한 오류로그를 남기지 않는 경우가 있어 스캐닝 도구들이 많이 사용
( Q. 어째서 이러한 비정상 패킷을 사용하는가?
A. 일부 구형 IDS/IPS/방화벽들이 이러한 비정상 패킷들을 탐지하지 못하고 패킷을 허용하거나, 또는 비정상 패킷에 대해 오류로그를 남기지 않는 경우가 있다 )
alert tcp any any -> 10.10.10.0/24 any (msg:"비정상 플래그 조합"; flags:SF; nocase; sid;1000088;) |
flags:SF : SYN과 FIN만 설정된 경우
flags:SF+ : SYN과 FIN은 반드시 있음. 다른 플래그도 있을 수 있다
flags:SF* : SYN과 FIN 중 하나를 포함. 다른 플래그도 있을 수 있다
flags:!SF : SYN과 FIN을 포함하지 않은 플래그
[**] [1:1000310:3] [CVE-2024-6214]Bash Vulnerability Requested header [**] [Classification: access to a potentially vulnerable web application] [Priority: 10] 02/20-01:54:00. 164774 10.10.10.10:80 -> 10.10.10.20:80 TCP TTL:44 TOS:0x0 ID:55555 iPlen: ... 중략 ******SF Seq: 0x2EA5B15A Ack: ... 하략 <- SF플래그 설정됨 UAPRSF |
=> 출발지 포트는 보통 unprivileged port(1024 이상)를 사용하는데 목적지 포트와 동일한 80포트를 사용하고 있음.
클라이언트의 요청에 대한 응답 패킷인 것처럼 위조하기 위한 목적
다) SYN_FIN 플래그 변형 비정상 TCP 패킷
alert tcp any any -> 10.10.10.0/24 any (msg:"비정상 플래그 조합"; flags:SF+; nocase; sid;1000098;) |
라) FIN 플래그만 설정된 비정상 TCP 패킷
alert tcp any any -> 10.10.10.0/24 any (msg:"비정상 플래그"; flags:F; nocase; sid;1000100;) |
마) 플래그가 설정되지 않은 비정상 TCP 패킷 (NULL 패킷)
alert tcp any any -> 10.10.10.0/24 any (msg:"비정상 플래그"; flags:!UAPRSF; nocase; sid;1000100;) |
(pam 모듈 복습
/lib/security 또는 /usr/lib/security 디렉터리에 저장됨.
플러그인 방식을 사용, 필요에 따라 인증체계를 선택적으로 사용
/etc/pam.d 디렉터리에서 pam 라이브러리를 이용하는 설정파일들이 위치한다
pam_securetty.so 모듈은 /etc/securetty 파일을 사용한다. 해당 파일에 pts/~ 터미널을 모두 제거하면 원격 접속을 막을 수 있다.
계정잠금임계값설정 : pam_tally.so모듈 이용
root 계정 su 제한 : pam_wheel.so 모듈 이용
+ ssh 원격접속은 /etc/ssh/sshd_config 파일의 PermitRootLogin 항목을 no로 설정한다.)
보안장비운영 2 END --
침입차단 시스템 iptables
개요
1) 패킷 필터링 기능을 가지고 있는 리눅스 커널에 내장된 netfilter 기능을 관리하기 위한 툴.
2) 상태추적Connection Tracking 또는 Stateful Inspection 기능 제공
- 방화벽을 통과하는 모든 패킷에 대한 연결 상태를 추적하여 메모리에 기억하고 있다가, 기존의 연결을 가장하여 접근할 경우 비교하여 적합하면 통과하고 그렇지 않으면 거부하는 기능
- 메모리상에 상태추적 테이블을 생성
- 연결된 상태의 패킷인 것처럼 위조한 패킷의 접근을 차단 (보안상 장점)
- 연결된 상태의 패킷에는 더 이상 패턴 매칭 검사를 수행하지 않음 (성능상 장점)
3) NAT(네트워크 주소 변환) 기능 제공
4) 패킷 레벨에서의 로깅 기능
5) 확장모듈을 통한 다양한 기능
단답형 문항 예시
Q. 패킷별 네트워크 및 전송계층 정보만 보는 것이 아니라, 일정 시간동안 프로토콜의 상태정보를 유지함으로써 보다 빠르고 높은 보안성을 제공한다. 이는 방화벽의 어떤 방식을 설명하는가?
A. Stateful Inspection 상태 추적 기능
용어정리
1) 테이블
- iptables가 제공하는 기능을 의미. Filter, Nat, Mangle 테이블이 있음.
2) 체인
- 패킷이 이동하는 경로
- 서버 방화벽 : INPUT chain(방화벽이 목적지), OUTPUT chain(방화벽이 출발지)
- 네트워크 방화벽 : FORWARD chain 체인(방화벽을 통과하는 채널)
3) 룰
- 패킷을 필터링하기 위한 룰
사용법
1) 기본 구문
형식) iptables [테이블] [체인] [룰] [타겟]
- 대소문자를 구별함
2) 테이블 설정
형식) -t [테이블]
- 명시하지 않으면 디폴트로 Filter 테이블 적용
3) 체인 설정
형식) iptables -[ A | I | D ] [체인]
-A : Append. 마지막에 룰 추가
-I : Insert. 첫 행에 룰 추가
-D : Delete. 특정위치 룰 삭제
(Filter 테이블은 INPUT, OUTPUT, FORWARD 체인 있음)
4) 룰 설정
가) IP/ICMP/TCP/UDP 모두 호스트 식별을 위해 IP 사용
1) -s [ip 또는 대역] : 출발지
2) -d [id 또는 대역] : 목적지
나) tcp/udp는 포트번호를 통해 서비스 식별
1) --sport [포트번호] : 출발지 포트 명시
ex --sport 23 : 23포트
--sport 23: : 23이상의 포트
2) --dport :[포트번호] : 목적지 포트 명시
다) ICMP의 경우 타입과 코드를 통해 메시지 식별
1) --icmp-type [메시지타입] : 메시지 타입 명시
ex --icmp-type echo-request : 에코 리퀘스트 메시지
라) TCP 패킷 행동 유형에 따른 필터링 룰 설정. tcp 프로토콜(-p tcp) 가 선행되어야함
1) --tcp-flags [검사할 플래그들] [설정되어야할 플래그들]
ex) --tcp-flags SYN,FIN SYN,FIN : SYN, FIN 플래그가 설정된 패킷을 탐지.
ex) --tcp-flags all SYN,FIN : 모든 플래그를 검사해서 SYN, FIN만 설정된 패킷 탐지. (다른 플래그 안됨)
2) -m state --state [탐지할 상태]
ex) -m state : 확장기능 중 TCP 상태 기능 사용
ex) --state ESTABLISHED : 연결된 상태만 보겠다. 종류는 NEW, ESTABLISHED, RELATED, INVALID 있음
실제 문항 예시 [snort 룰 설정] drop tcp any any -> any any(msg : "SYN/FIN Drop"; flags:SF;) [iptables 룰 설정] iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP 1) 위 규칙을 통해 탐지 및 차단하려는 패킷은? => SYN, FIN 플래그만 설정된 TCP 패킷을 차단한다. 2) 위 규칙을 통해 탐지 및 차단해야 하는 이유는? => SYN, FIN 플래그는 동시에 설정될 수 없는 비정상 패킷이다. 공격자는 일부 구형 IDS/IPS/방화벽이 비정상 패킷을 탐지/차단할 수 없고, 로그를 남기지 못하는 것을 이용해 시스템이 패킷을 정상적으로 처리하지 못해 오류 또는 에러를 발생시키게 하거나, 스캐닝을 위한 목적으로 사용한다. |
5) 타겟 설정
1) -j [정책] : 룰에 매치될 때 적용할 정책을 지정
ex) -j ACCEPT : 허용
ex) -j DROP : 차단 (액션X)
ex) -j REJECT : 차단후 ICMP 에러 메시지 전송
ex) -j LOG : 탐지로그 남김
6) 기타 옵션
가) iptables -L [체인] -n
1) -L [체인] : 해당 체인에 등록된 룰 리스트 조회 ( ex iptables -L INPUT -n )
2) -n : IP와 PORT를 숫자로 출력
iptables -F [체인] : 해당 체인의 등록된 룰 정보 삭제
iptables -P INPUT DROP
=> INPUT 체인의 기본정책을 DROP으로 하겠다
Negative 정책 : 기본정책 DROP/REJECT (보통 Negative 정책 사용)
Positive 정책 : 차단할 부분만 DROP/REJECT
상태추적connection tracking(stateful inspection) 기능 활용
1) 상태 유형
- NEW : 최초로 들어온 패킷의 상태 (TCP의 경우 SYN 패킷)
- ESTABLISHED : 상태추적 테이블에 연결정보를 갖고 있는 상태
- RELATED : 상태추적 테이블에 연관된 연결정보를 가지고 있는 상태
(FTP의 Active 모드일때, 21 tcp제어채널만 열어주고 20 tcp 데이터채널은 연관된 연결정보로 허용됨)
- INVALID : 어떤 상태도 아님. 연결상태를 알 수 없거나 잘못된 헤더일 경우
(복습
active mode (클라->서버, 서버->클라)
client는 서버의 21 tcp 포트에 접속하여 제어채널 연결
서버는 20 tcp 포트로 client의 1024이상 tcp 데이터 채널 연결
passive mode (클라->서버, 클라->서버)
client는 서버의 21 tcp 포트에 접속하여 제어채널 연결
client는 1024이상 tcp 포트로 서버의 1024이상 tcp 데이터 채널 연결)
프로토콜별 상태 유형
1) TCP 프로토콜
- 최초로 SYN 패킷이 보이면 NEW 상태가 되고, SYN+ACK 패킷이 보이면 ESTABLISHED 상태가 된다
2) UDP 프로토콜
- 비연결 프로토콜. 연결상태가 없다.
- UDP는 패킷이 들어올 때마다 NEW 상태가 되고, 내부적인 TTL이 유지될 동안 ESTABLISHED 상태이다
(iptstate 명령어를 이용하면 실습이 편하다)
보안장비운영 3 END --
'(실기) 정보보안기사&산업기사' 카테고리의 다른 글
보안장비운영 8,9 시스템 점검도구 1,2 침해사고 유형별 시나리오 1 (0) | 2024.04.08 |
---|---|
보안장비운영 4~7 (0) | 2024.04.05 |
이메일 보안 3, 데이터베이스 보안 1,2,3 (0) | 2024.04.03 |
웹 서버 취약점 4~6, 이메일 보안1,2 (0) | 2024.04.02 |
웹 서버 취약점 3 (httpd.conf 주요설정 암기) (0) | 2024.04.01 |