All posts

공부/정보보안기사

FTP 능동 모드(Active mode)

Active mode - 일반적인 모드.

Control Channel(TCP/21)과 Data Channel(TCP/20)로 구분

 

Client가 Control channel에 접속 후 데이터 요청하면,

Server의 Data channel에서 Client로 연결을 생성하여 데이터 전송

 

* 방화벽 설정 시 Control channel 접속 후, Data channel에는 접속 불가.

 

해결방안

* Client 단 방화벽에 원격 FTP Data Channel 허용

* 수동 모드(Passive mode)를 사용

 

FTP 수동 모드(Passive mode)

Client가 Server의 Data channel을 생성하여 데이터 전송

 

* 서버측 방화벽에서 Data channel에 사용하는 Port를 모두 허용해야함.

 

해결방안

* 방화벽에서 상태 검사(Stateful Inspection)를 활성화 하여 연결 상태 추적

 

FTP Bounce Attack

Control channel과 Data channel이 분리되어 있고,

Data channel을 생성할 때 임의의 목적지 IP와 Port 번호를 설정할 수 있는 FTP 구조적 취약점을 이용한 공격

 

* Data channel에서 'PORT' 명령을 이용하여 내부 시스템에 연결 시도 혹은 네트워크를 스캔 가능

* 공격파일을 업로드 요청하면서, 'PORT' 명령을 조작하여 내부 서버로 파일 전달

 

TFTP Attack

UDP/69을 사용. 별도의 인증과정 없이 디렉터리 접근 가능.

 

해결방안

* TFTP 기능 비활성화 혹은 secure mode 활성화

tftp
---------------
...
service tftp
{
    #disable		= yes	## 비활성화
    ...
    disable		= no
    server_args		= -s /tftpboot	## 최상위 디렉터리 설정(Secure mode)
    ...
}

 

Anonymous FTP attack

* 익명 접속 비활성화

anonymous_enable=NO

 

FTP 접근 제어 설정

ftpusers / user_list
----------
root
daemon
ftpuser
----------
userlist_enable=YES

HTTP (Hyepr Text Transfer Protocol)

HTTP/1.0 클라이언트 요청에 대한 응답 이후 TCP 연결 종료.

HTTP/1.1 부터 Keep-Alive 옵션 추가.

Keep-Alive를 통해 한 번의 연결 이후 요청/응답 반복 가능.

하지만, Server에서 Client의 상태 정보는 저장하지 않음. Cookie, Session을 이용하여 상태 정보 유지.

 

Keep-Alive 응답 헤더 추가 옵션

timeout - 연결 지속 시간

max - 최대 요청 개수

 

웹 서버 설정 파일(httpd.conf)

httpd.conf
    ---------------
    ...
    KeepAlive On

    MaxKeepAliveRequests 100
    KeepAliveTimeout 30
    ...
    ---------------

 

Cookie 방식

HTTP Header에 Client의 상태 정보를 담아서 전달 하는 방식

Set-Cookie 응답헤더로 쿠키 설정

 

세션 쿠키(Session Cookie)

클라이언트의 메모리에 저장하여 세션이 유지되는 동안 존재하는 쿠키

 

지속 쿠키(Persistent Cooke)

클라이언트에 파일 형태로 지속해서 존재하는 쿠키

 

Session 방식

Client에 Session ID를 부여하고 Session에 대한 정보를 Sever에 저장하는 방식

Session Cookie를 이용하여 요청/응답

 

HTTP Cookie 보안 속성

httponly - 스크립트를 통한 쿠키 접근 차단

secure - HTTPS 통신일 경우에만 쿠키 전달

 

주요 요청 메소드(Request Method)

Request Method 설명
GET 일반 요청. Query String으로 데이터 전송 가능.
POST 데이터를 전달하고 처리 결과를 요청.
HEAD 헤더 값만 요청
OPTIONS 지원하는 Method 확인
CONNECT 터널링
PUT 데이터 저장
TRACE 루프백 테스트
DELETE 삭제

 

주요 상태 코드(Status Code)

Code State
1xx Info
2xx Success
3xx Redirection
4xx Client Error
  401 Unautorized
  403 Forbidden
  404 Not Found
5xx Server Error

 

DNS

UDP/53 을 사용. 응답 데이터가 512Bytes 이상일 경우 TCP/53 사용.

도메인 질의 방식

1) Local DNS Cache

2) hosts.ics (Windows)

3) hosts File

4) NameServer

 

DNS Cache 조회/삭제

> ipconfig /displaydns	## DNS Cache 조회
> ipcofnig /flushdns	## DNS Cache 삭제

Windows ipconfig 명령어 실행

TTL - 해당 Cache 정보를 유지하는 시간

 

DNS Lookup

Record Type 설명
A, AAAA 도메인의 IP 주소
ANY 도메인에 대한 모든 레코드
MX 도메인의 메일 서버
NS 도메인의 네임 서버
SOA 도메인 영역(Zone)의 기본 속성 정보
TXT 텍스트 정보. SPF 등 다양하게 사용.
PTR 역방향 도메인 정보. IP로 도메인 정보 질의
AXFR 모든 Zone 정보 요청.

 

nslookup 명령어

> nslookup [Domain] [NameServer]
## NameServer 미 입력 시 시스템에 설정된 NameServer 이용


> nslookup		## 대화형 모드 진입

> server [NameServer] 		## NameServer 설정
> set type=[Record Type]	## Record Type 설정

 

dig 명령어

# dig [@NameServer] Domain [Type] [Option]
ex) dig tistory.com
	dig kakao.com MX	// kakao.com 도메인의 메일 서버 질의
	dig @8.8.8.8 youtube.com A +trace
    				// 8.8.8.8을 NS로 설정하여 youtube.com 도메인 질의 및 경로 추적
    dig -x 8.8.8.8		// 8.8.8.8의 역방향 레코드(Reverse Record) 조회
    
[Option]
+short		// 최소한의 결과만 출력
+trace		// 도메인 질의 경로 추적
+tcp		// tcp 허용 여부 확인
+dnssec		// dnssec 사용 여부 확인
+recurse	// 재귀적 질의(Recursive Query)
+norecurse	// 반복적 질의(Iterative Query)
+multiline	// 보기 편하게 출력

 

DNS를 이용한 공격

Client에게 전달되는 DNS 응답을 조작하거나 Cache 정보를 조작하여 공격 대상이 의도하지 않은 주소로 접속하게 만드는 공격.

 

1) 스니핑(Sniffing)을 기반 DNS 스푸핑

2) DNS 캐시 포이즈닝(Cache Poisoning)

 

스니핑(Sniffing) 기반 DNS 스푸핑

공격자가 네트워크 스니핑을 진행.

공격 대상 컴퓨터가 도메인 질의 시 정상 응답이 도착하기 전에 조작된 응답을 전달하는 기법

 

예방

* Sniffing 탐지 및 차단

* 중요 도메인은 hosts 파일 설정

 

DNS Cache Poisoning 공격

공격자가 공격 대상 DNS 서버에 조작할 도메인을 질의.

질의 요청과 함께 조작된 응답의 Transaction ID와 Destination Port 램덤하게 생성하여 전송.

대상 DNS 서버는 Iteractive Query를 요청.

공격자의 조작된 응답 중 정상 응답보다 먼저 일치하는 응답이 있다면, DNS 서버 캐시에 저장.

 

예방

* NameServer 최신 업데이트 유지

* 관리용 DNS 서버는 Recursive Query 비활성화 하거나 사용자 제한

* DNSSEC 사용

 

네임서버, 존 설정 파일(named.conf, zone File)

named.conf
---------------
options {
    directory "/var/named";
    ...
};

zone "frosty.kr" IN{
    type master;
    file "frosty.kr.zone";
};

zone "10.168.192.in-addr-arpa" IN{
    type master;
    file "10.168.192.in-addr-apra.zone";
};
---------------
frosty.kr.zone
---------------
$TTL	1800
@	IN	SOA	ns1.frosty.kr.	master.frosty.kr. (
		2024110801		;serial		// Zone file 버전 정보
		43200			;refresh	// Zone 전송 주기
		1800			;retry		// 실패시 재시도 대기시간
		604800			;expire		// Zone 정보 만료 시간
		1800)			;Minimum	// TTL

# [Hostname] [TTL]	Class	Type	Data
# Hostname이 위 레코드와 동일할 경우 생략

	IN	NS	ns1.frosty.kr.
   	IN	MX	10 mx1.frosty.kr.
   	IN	A	192.168.10.12
    
ns1	IN	A	192.168.10.100
mx1	IN	A	192.168.10.101
www	300	IN	A	192.168.10.10
---------------

10.168.192.in-addr-apra.zone
---------------
...
100	IN	PTR	ns1.frosty.kr
101	IN	PTR	mx1.frosty.kr
100	IN	PTR	www.frosty.kr
---------------

 

재귀적 질의(Recursive Query) 제한

named.conf
---------------
acl mynet { 192.168.10.0/24; };

options {
	...
	recurstion no;			## 재귀적 질의 비활성화
	#allow-recursion { mynet; };	## mynet 네트워크만 허용
	...
};
---------------

 

Zone Transfer 제한

named.conf
---------------
...

options {
	...
	allow-transfer { none; };		## Zone transfer 비활성화
	#allow-transfer { 192.168.10.12; };	## 특정 서버만 허용
	...
};
---------------