bxm's IT Story

Cisco ASA 방화벽(3) - DPI(HTTP,FTP,DNS) 본문

Network/Firewall (KEDU)

Cisco ASA 방화벽(3) - DPI(HTTP,FTP,DNS)

bxmsta9ram 2021. 7. 19. 09:58

## Application Layer Control (DPI) 1 - HTTP ##

 

IPS]

conf t

line vty 0 4

  pass cisco123

  enable cisco123

 

## ISP에서 Telnet 가능하게 하고, Win7에서 테스트


CE]

conf t

ip nat inside source static tcp 1.1.100.6 23 1.1.100.2 80

 

int f0/0

  ip nat outside

  exit

 

int f0/1

  ip nat inside

  exit

 

line vty 0 4

  pass cisco123                                       

  enable password cisco123                                ## Win701에서의 Telnet 사용때의 비밀번호임!


Win702]

ping 192.168.1.254

## 방화벽 단자까지 통신되는지 한번 확인

 


## 설정 후 Win7의 CMD에서 [telnet 1.1.100.2 80] 명령어를 입력하면, 80번 포트로 방화벽을 우회하여 ISP에

    Telnet 연결이 가능하다.

Win701]



## 과제 1##

관리자는 MPF의 DPI 기능을 사용하여 위와 같은 Port 우회를 차단하고, 내부 사용자가 www.yahoo.co.kr과

www.naver.com에 접속하려는 경우 URL Filter를 사용하여 접속을 차단하시오.

 

ASA]

                                                                                   ## \.은 특수문자(Regex)가 아닌 그냥 .이다.

conf t

regex Deny_URL1 ".\.naver\.com"

regex Deny_URL2 ".\.yahoo\.co\.kr"

 

class-map type regex match-any Deny_URL

  match regex Deny_URL1

  match regex Deny_URL2

  exit

 

class-map type inspect http HTTP_DPI_C                                ## DPI_C 이거 정의 안해줬다가 쭉 오류났었음 ㅎㅎ..

  match request header host regex class Deny_URL                  

  ## 여기서 위의 형광색은 http 안의 header에 들어가 NAVER같은 것을 검색해서 막아버린다는 것인데,

       아래 443으로 막은 https는 https(security) 암호화 되어 있기 때문에 검출 자체를 못한다. 

       그래서 그냥 검출 못하는 것도 다 막아버린 것임!! https를 찾아서 직접 막으려면 비싸게 돈주고 버전업된거 사라.

       

 

 

policy-map type inspect http HTTP_DPI_P

  class HTTP_DPI_C                                                            ## HTTP_DPI_C이면

    drop-connection log

  exit

parameters

  protocol-violation action drop-connection log                     ## L2  IP  TCP  HTTP가 아닐 경우, Drop 시키겠다.

  exit

 

 

class-map HTTP_C

  match port tcp eq 80

  exit

 

class-map HTTP_CS

  match port tcp eq 443

  exit

 

 

policy-map HTTP_P                                                           ## HTTP 막기

  class HTTP_C

    inspect http HTTP_DPI_P

  exit  

 

policy-map HTTP_P                                                           ## HTTPS 막기               

  class HTTP_CS

    inspect http HTTP_DPI_P

 

 

service-policy HTTP_P interface Inside

 

 

 

## Verify ##

show service-policy interface Inside

 

* parameters -> protocol-violation action drop-connection log

L2  IP  TCP  HTTP가 아닐 경우, Drop 시키겠다.

 

 

 

## 캐시 전부 지우고 네이버와 야후 막아지나 확인

Win701]

www.naver.com

www.yahoo.co.kr

다 막혔다!!

 


## 결국 https는 안막아지고, 그냥 인터넷 전부를 막아버린 것임. ##

## 현재 아무것도 안되니 다시 풀어주자.

ASA]

conf t

no service-policy HTTP_P interface Inside

인터넷 잘 된다!! ㅎㅎ


## GUI 모드로 변경할 수도 있다. ##

URL Filter - Add 에서 URL을 직접적으로 막을 수 있다. (GUI 짱짱맨..!)

 

 

 



## Application Layer Control (DPI) 2 - FTP ##

## FTP로 .exe 파일은 안된다. 카카오톡만 봐도 .exe 파일은 직접 전송이 불가능함!!

 

* Inside 사용자가 FTP 서버에서 파일을 다운로드 하는 경우 'exe' 라는 키워드가 들어있는 파일의 전송은 차단하고,

  FTP 배너 메시지가 공개되지 않도록 MPF를 설정하시오.

 

ASA]

show run policy-map FTP_P

## 먼저 우리가 아래에서 사용할 FTP_P라는 이름을 가진 것이 있는지 확인해보자.

 

show service-policy interface Inside                            ## policy-map의 Inside에 무엇이 적용되었는지 보자.

아무것도 적용되어 있지 않다.

 

 

 

conf t

regex Deny_FTP_File ".\.([eE][xX][eE])"

## 대괄호는 택1임!! 만약 10개가 있어도 그중 1개로 택1 !!

exe exE eXe eXE Exe ExE EXe EXE

 

class-map type inspect ftp DPI_FTP_C

  match filename regex Deny_FTP_File

 

policy-map type inspect ftp DPI_FTP_P

  class DPI_FTP_C

  reset

  exit                                                    ## 이것이면 reset해라!!

 

parameters

  mask-banner

  exit                                                   ## 배너메시지가 공개되지 않도록 하겠다.

 

 

 

class-map FTP_C

  match port tcp eq 21

  exit

policy-map FTP_P

  class FTP_C

    inspect ftp strict DPI_FTP_P                 

    exit                                                ## 이것과 일치하면~ 이런 의미임

 

service-policy FTP_P interface Inside

 


## 이제 셋팅은 모두 끝마쳤다. FTP에서 .exe 파일을 못 받게 하는 것은 매우 중요하다!! 되는지 확인!!

Win702]

FTP가 리눅스에 있으므로 도착지를 Any로 바꿔준다.
Any로 변경되었다!!

 


## Inside에서 해야하므로 Win701에서 알드라이브 접속

Win701]

알드라이브 - 100.1.1.251 연결

접속하였다!!
.exe 실행파일을 올리려 했으나 실패하였음!! ㅎㅎ


CentOS]

cd /var/

cd ./ftp/pub

ls -l

 

## exe 파일 만들어보기

touch test.exe


Win701]

## test.exe 파일을 다운로드 하려 했으나 되지 않음!

.exe 실행파일도 결국 다운받지 못했다!!


## 그럼 권한을 바꿔도 전송하지 못할까?

CentOS]

 

Win701]

백날 해봤자 다운로드 / 전송 불가능하다.

 

 

 



## Application Layer Control (DPI) 3 - DNS ##

* 리쿼시브 쿼리(RQ) : 내부 도메인 서버에게 질의 (외부 도메인을 모르면 대신 알아봐 달라!!)

 

* 반복 질의(IQ) : 외부 사용자가 질의할 때 사용

 

* 외부 사용자의 재귀적 쿼리에 대한 응답(DNS Header Flag)의 RD bit가 '1' 일때)

  ## 재귀적 쿼리 비트는 내부든 외부든 무조건 RD bit가 1이다.

 

* 외부 공격자가 특정 조직의 DNS 서버에게 다량의 Recursive Query를 반복적으로 전송하여 DNS 서버 부하를

  줄 수 있다. 이와 같은 문제를 MPF를 사용하여 해결할 수 있다.

 

   1) ASA는 외부에서 들어오는 kedu 도메인 정보 요청은 허용하고,

      그 외 나머지 정보를 물어오는 DNS Query는 차단해야 한다.

       Inside 사용자가 물어오는 모든 DNS Query는 허용해야 한다.

ASA]

regex Per_Domain "kedu\.edu"

 

class-map type inspect dns DPI_DNS_C

  match not domain-name regex Per_Domain                    

  match question

## "Kedu.edu"가 아닌, 다른 질의 메시지라는 뜻이다.

 

policy-map type inspect dns DPI_DNS_P

  class DPI_DNS_C

  drop log

  exit

match header-flag RD

  mask

  exit

## RD 비트가 1인 재귀적 쿼리들은 RD 비트를 Drop 시키고, 0으로 바꿔라.

 

access-list DNS_MPF deny udp object-group HQ_IN_NET object DNS_SVR eq 53

## 하지만 출발지가 외부가 아닌 내부인 것은 검사 대상에서 제외시켜라!!

 

 

class-map L4_DNS_C

  match access-list DNS_MPF

  

policy-map L4_DNS_P

  class L4_DNS_C

    inspect dns DPI_DNS_P

    exit

 

service-policy L4_DNS_P interface DMZ

 


## Kali에서 2차 DNS가 있기 때문에 kedu.edu에 대한 이름풀이가 되긴 될 것임!!

Kali]

vi /etc/resolv.conf

DNS2인 168.126.63.2에 대해 동작 안하게 하고

nslookup

www.naver.com