Network/Firewall (KEDU)

Cisco ASA 방화벽(2) - SSH, ASDM(GUI Firewall), ACL(Access Control List), Syn Flooding 방어

bxmsta9ram 2021. 7. 16. 10:30

## 2. SSH (Secure SHell) ##

* TCP 포트 22번 사용 / 암호화해서 주고받음 / Username이 있어야 동작을 한다.

* ASA에서 Telnet과 다르게, Security-level이 낮은 Interface에서도 SSH 접근이 가능하다.

 

 

ASA]

username admin password cisco123

aaa authentication ssh console LOCAL

crypto key generate rsa modulus 1024

## ras는 암호화해서 어떻게 주고받을지 고민하던 3 사람의 앞 이니셜임 ㅎㅎ..

 

 

ssh 200.1.1.0 255.255.255.0 Inside

ssh 1.1.100.2 255.255.255.255 Outside

 

 

show int ip br

## IP가 제대로 들어가 있다.


## [ssh2] - [200.1.1.254]

ID : admin

PW : cisco123

 

 

GNS3]

Win701과 SW가 연결된 선 캡처

tcp.port==2

막 주르륵 뜬다.

 

 

CE] - 여기서 접근을 하려면

ssh -l admin 1.1.100.1

## telnet과 다르게 Security-level이 낮은쪽에서 높은쪽으로도 접근이 된다

 

##Password : cisco123


## 3. ASDM(cisco Adaptive Security Device Manager) ##

GUI 모드로 실행해보자

 

* ASDM 방식은 Telnet / SSH 와 다르게 GUI 환경으로 ASA를 관리할 수 있는 접속방식이다.

 

* ASDM을 사용하기 위해서는 TFTP 사용, ASA의 Flash 메모리에 ASDM 바이너리 파일을 업로드 시켜야 한다.

  이후 ASA에 Web 서비스를 활성화시키고, Client에서 Web Browser를 사용하여 접근이 가능하다.

  이제 ASA의 'Gigabit 3' 단자를 관리용으로 할당해보자.

 

 

ASA]

conf t

int g 3

  desc ##Management Interface##

  nameif Management

  ip add 192.168.1.254 255.255.255.0

  security-level 100

  management-only

  no shut

  exit


## 텔넷과 SSH 설정을 초기화하기

clear configure telnet

clear configure ssh

 

ssh 192.168.1.0 255.255.255.0 Management


Win702] - Management PC로 사용할 것임.

## VMnet 9번

## 게이트웨이로 Ping 가는지 확인

ping 192.168.1.254

 

 

위의 메뉴에서 [VM] - [VM Update Tool]해서 업데이트하기. ==> VMware로 아이콘을 끌어올 때 사용하기 위해서

Win702로 끌어왔다!! 신기신기


 

ASA]

copy tftp: flash

 

192.168.1.1                       ## Win702 Tool로 지정

asdm-649.bin                    ## 하고 그냥 엔터하면 ASA로 복사가 된다.

 

dir /all                             ## 전송된 것이 보여야 한다.

 

 

## 이렇게 하면 에러가 뜬다ㅎㅎ. Win702 Management PC에서 TFTP Server를 켜지 않고 복사하면 당연히 복사 안됨.

    아래와 같이 접속 자체가 안된다.

에러 뜬 화면

 

이걸 켜놓고 복사해야 한다.
정상 설치 완료.


## GUI 모드로 전환 !! ##

ASA]

username admin password cisco123

asdm image flash:asdm-649.bin

http server enable

http 192.168.1.1 255.255.255.255 Management

## 이러면 ASDM이 구동한다!!

Win702]

## Management PC에서의 Internet은 JAVA 기반이므로 JAVA 설치!

 

## Ping 잘 가나 확인

 

 

## Chrome 쓰지 말고, 익스플로어로 접속. 그러면 인증서 페이지가 뜰 것임.

https://192.168.1.254

ID : admin // PW : cisco123
방화벽에 접속하였다.

## 이게 ASDM이다. 방화벽 System에 접속하였음.


## ASA ACL (Access Control List) ##

* ASA는 기본적으로 Security-level이 낮은 방향에서 높은 방향으로 전송되는 트래픽은 모두 차단된다.

  만약 특정 트래픽에 대해서 level이 높은 방향으로 접근을 해야 하는 경우 관리자가 Access-list를 사용하여 

  접근을 허용해야 한다.

 

* ASA의 기본적인 L3/L4 패킷 제어는 'Access-list'를 사용하고,

  Application(L7) 계층 제어 및 검사(DPI)는 'MPF(Modular Policy Framework)'를 사용한다

 

* ASA의 Access-list 설정 방식은 Router와 거의 동일하다. 차이점은 다음과 같다.

  1) ASA의 경우 Standard CL은 패킷 필터링 용도가 아니기 때문에 Extended ACL을 사용한다.

      ## 우리가 NAT 돌릴 때 Access-list 1 했던 것이 Standard이다!!

 

  2) ASA는 Numbered ACL은 지원되지 않고, named 방식만 지원한다.

      ## 그럼 이름을 왜 써주느냐? named의 장점은 '수정이 가능하다는 점임!!"

 

  3) Wildcard mask가 아니라 Netmask를 사용한다.

 


Ex1> Outside에서 DMZ에 위치한 다음 서비스들에 대해 접근을 허용하시오.

          - DNS 서버(100.1.1.250)

          - Web 서버(100.1.1.251)

          - IPMP (100.1.1.0/24)

 

 

## 현재 Kali에서 DMZ 쪽으로 접근을 하지 못한다.

ns lookup

www.kedu.edu

 

 

## 그래서 접근을 하게 해주려면

ASA]

access-list OUT->IN extended permit udp any host 100.1.1.250 eq 53         ## 이름풀이 되게

access-list OUT->IN extended permit tcp any host 100.1.1.250 eq 80

access-list OUT->IN extended permit icmp any 100.1.1.0 255.255.255.0          ## ping 되게

출발지 목적지 포트넘버 프로토콜

 

access-group OUT->IN in interface Outside

 

show access-list            

 

 

Kali]

## 이제 Kali에서 접근이 가능함!!

vi /etc/resolv.conf

 

service networking restart

 

nslookup

>www.kedu.edu

이름풀이가 잘 된다.

 

 

Win702]

refresh now

 

[configuration] - [Access Rules]

access-list의 Outside에 방금 ASA에서 추가한 내역 3개가 나온다!!



## GUI로 방화벽 구현(추가/삭제/수정) ##

Ex1> Kali에서 허용된 서비스들의 접근을 확인 후 다음 조건에 따라

Access-list를 수정하시오.

          * Outside에서 DMZ로 전송되는 ICMP 차단.

          * Outside에서 DMZ의 FTP 서버 접속 허용.

 

<방법 1 - GUI>

이렇게 Delete 및 Insert를 해도 되고, 아래와 같이 ASA에서도 Delete 및 Insert가 가능하다.

 

<방법 2 - ASA>

ASA]

no access-list OUT->IN line 3 permit icmp any 100.1.1.0 255.255.255.0

access-list OUT->IN line 3 permit tcp any host 100.1.1.251 eq 21

 

show access-list

Kali]

ping 100.1.1.250      ## 이제 Ping은 안된다!

 

## Ping 허용해보기

 

 

 

## 이제 4번에 ICMP가 생겼고, Ping이 된다.

ping 100.1.1.250


## ASA Access-list log ##

* Router의 경우 Access-list에 의해서 차단되는 패킷에 대한 log 메시지를 확인하기 위해 [log] 혹은 [log-input] 옵션을 사용한다.  반면에 ASA의 경우 별도의 log 관련 옵션을 사용하지 않아도 [logging enable] 명령어로 방화벽 자체의 log를 확인하게 되면, 차단되는 패킷들의 log를 확인할 수 있다.

 

logging console 4

logging enable

 

* 위와 같이 log 메시지를 발생시키는 경우 문제점은, 차단되는 packet마다 각각 log 메시지가 발생된다는 점이다.

  만약 외부에서 DDoS와 같은 Flooding 공격이 발생되고 log를 확인하는 순간 수많은 log 메시지가 생성되면서

  장비에 과부하가 발생될 수 있다.

  이러한 문제점을 해결할 수 잇는 방법은 차단되는 Packet마다 log를 발생시키는 것이 아니라, 일정 시간동안

  차단된 Packet의 숫자를 통계치로 log를 발생시키도록 설정하는 것이다.

 

 

 

## 계속 log 나오는걸 취소하려면

no logging on 하면 된다.

 

ASA]

access-list OUT->IN deny ip any any log 4 interval 60     

  ## level 4 이하의 log 메시지를 60초 간격마다 통계치를 보여 달라는 의미이다.

 

## 그리고 GUI에서 icmp 방화벽 차단 후 Kali에서 Ping!!

Kali]

ping 100.1.1.250

 

##ASA에서 log가 나타난다!!


## Object_Group ##

1. Object

  특정 Network 혹은 Service를 Object로 정의하여 사용이 가능하며, Network와 Servcie object로 구분한다.

  

Ex1> 다음 IP 대역을 'Network-Object'로 설정하시오.

200.1.1.0/24 영업부
200.2.2.0/24 관리부
200.2.3.0/24 인사부
200.2.4.0/24 IT 지원팀
100.1.1.250 DNS
100.1.1.251 Web
100.1.1.252 FTP
100.1.1.253 Mail

  

ASA]

object network Sales

  subnet 200.1.1.0 255.255.255.0

object network MGR

  subnet 200.2.2.0 255.255.255.0

object network HR

  subnet 200.2.3.0 255.255.255.0

object network IT_Support

  subnet 200.2.4.0 255.255.255.0

 

 

object network DNS_SVR

  host 100.1.1.250

object network WEB_SVR

  host 100.1.1.251

object network FTP_SVR

  host 100.1.1.252

object network MAIL_SVR

  host 100.1.1.253

 

 

Refresh now - [Firewall] - [Object]

Network Object가 8개가 생겼다.

 

Ex2> FTP, DNS Service Object를 설정하시오.

object service DNS_P

  service udp destination eq 53

object service FTP_P

  service tcp destination eq 21

 

 

Refresh now - [Firewall] - [Object]

Service Object가 2개가 생겼다.


2. Object-Group

  * 다수의 Network / Protocol / Service 등을 묶어서 하나의 Object-Group으로 정의할 수 있다. 

    또한 기존 Object / Object-Group을 포함하는 것도 가능하다.

 

Ex1> 다음 Network 대역을 본사 Network 대역으로 Object-Group을 사용해

        정의하시오.

network-object 200.1.1.0/24 영업팀
network-object 200.2.2.0/24 관리팀
network-object 200.2.3.0/24 인사팀
network-object 200.2.4.0/24 IT 지원팀

 

 

 

ASA]

conf t

Object-Group network HQ_IN_NET

  network-object object Sales

  network-object object MGR

  network-object object HR

  network-object object IT_Support

        -or-

 

Object-group network HQ_IN_NET

  network-object 200.1.1.0 255.255.255.0

  network-object 200.2.2.0 255.255.255.0

  network-object 200.2.3.0 255.255.255.0

  network-object 200.2.4.0 255.255.255.0

 

## Verify ##

clear configure object

show run object-group


Ex2> 다음 조건에 맞도록 Service Object-Group를 설정하시오.

  - Web Service : HTTP, HTTPs

  - Mail Service : SMTP, POP3, IMAP

 

 

ASA]

conf t

Object-group service WEB_S

  service-object tcp destination eq 80

  service-object tcp destination eq 443

  exit

 

Object-group service MAIL_S

  service-object tcp destination eq 25

  service-object tcp destination eq 110

  service-object tcp destination eq 143

 

show run object-group

다 잘 들어가 있다.




## 기존 설정 삭제 ##

(이건 그냥 알려준거고 아래 명령어들을 위해 지우면 안된다)

ASA]

clear config access-list

show run access-list

show run access-group

아무것도 뜨지 않는다.


## Object & Object-group를 사용한 Access-list 설정 ##

(정책을 총 6단계에 걸쳐서 설정해보자)

 

* HQ Inside에는 영업부/관리부/인사부/IT 지원팀이 모두 포함되어 있다고 가정한다.

Inside -> DMZ DNS, WEB, FTP, Mail
Inside -> Outside 모든 서비스 허용
DMZ -> Inside 모든 접근 차단
DMZ -> Outside DNS, SMTP
Outside -> DMZ DNS, WEB, Mail
Outside -> Inside 모든 접근 차단.

 

1. Inside -> DMZ : DNS, WEB, FTP, Mail

    ASA]

 ## access-list INSIDE_IN permit ? : 뒤에 Protocol을 쓰라고 함.

     

    ## 말로만 하면 이해가 안되므로, 직접 타이핑치면서!!

    ## group HQ_IN_NET : 출발지

        DNS_SVR : 목적지

        DNS_P : 프로토콜

위에서 DNS_P을 미리 설정해주었기에, DNS가 설정된 것이다.

      

      

      access-list INSIDE_IN permit object DNS_P object-group HQ_IN_NET object DNS_SVR
      access-list INSIDE_IN permit object-group WEB_S object-group HQ_IN_NET object WEB_SVR
      access-list INSIDE_IN permit object FTP_P object-group HQ_IN_NET object FTP_SVR
      access-list INSIDE_IN permit object-group MAIL_S object-group HQ_IN_NET object MAIL_SVR

     

      #나머지는 전부 거부!!

      access-list INSIDE_IN deny ip object-group HQ_IN_NET 100.1.1.0 255.255.255.0 log 4 interval 60

 

      access-group INSIDE_IN in interface Inside

     


2. Inside -> Outside : 모든 서비스 접근 허용

 ASA]

 access-list INSIDE_IN permit ip any any

 access-group INSIDE_IN in interface Inside


3. DMZ -> Inside : 모든 서비스 접근 차단

  * 묵시적으로 'deny ip any any' 가 생략되어 있다.


4. DMZ -> Outside : DNS, SMTP 서비스

 ASA]

 access-list DMZ_IN permit object DNS_P 100.1.1.0 255.255.255.0 any

 access-list DMZ_IN permit tcp 100.1.1.0 255.255.255.0 any eq 25

 access-list DMZ_IN deny ip any any log 4 interval 60

 

 access-group DMZ_IN in interface DMZ


5. Outside -> DMZ : DNS, WEB, MAIL

ASA]

access-list OUTSIDE_IN permit object DNS_P any object DNS_SVR
access-list OUTSIDE_IN permit object-group WEB_S any object WEB_SVR
access-list OUTSIDE_IN permit object-group MAIL_S any object MAIL_SVR
access-list OUTSIDE_IN deny ip any any log 4 interval 60

access-group OUTSIDE_IN in interface Outside


6. DMZ -> Inside : 모든 서비스 접근 차단

  * 묵시적으로 'deny ip any any' 가 생략되어 있다.


Win701]

## 정책대로 다 잘 되는지 확인.

인터넷 연결 양호
DNS 쿼리 양호 (nslookup)



## 마지막, ASA Packet-Tracer 명령어 ##

* ASA에서 관리자가 설정한 보안 정책이 정상적으로 동작하는지 확인할 수 있는 명령어이다.

 

* 트래픽 전송 경로 중간에 Firewall이 위치한 경우, 만약 이 트래픽 전송에 문제가 발생하면 가장 먼저 Firewall 정책을

  확인할 필요가 있다. 이 경우 모든 Filtering 정책 명령어를 하나씩 확인하는 것이 아니라,

  [Packet tracer] 명령어를 사용하게 되면 Firewall 정책 문제인지, 혹은 다른 이유인지를 쉽게 확인이 가능하다.

 

 

ASA]

conf t

packet-tracer input Inside udp 200.1.1.1 50000 100.1.1.250 53

## Inside에서 udp면 DNS인데, 이런게 가면 방화벽에서 허용할건지 안할건지 미리 확인이 가능함.

## Inside 단자로 수신한 트래픽중 출발지 200.1.1.1:50000에서 목적지 100.1.1.250:53 으로 전송이 가능이 가능한지

    Firewall에서 확인하는 명령어이다.  (50000은 출발지 'Port Number'이다)

 

    1번~1024번까지는 이미 정해진 Port Number이고, 그 이후는 정해지지 않은 사용가능한 Port Number를 뜻한다.

결과는 전부 Allow이다. ㅎㅎ

 

## 인터넷이 되는지 확인

packet-tracer input Inside tcp 200.1.1.1 40000 100.1.1.251 80

 

* Test 결과 마지막 줄에서 최종적인 Allowed 혹은 Drop 여부를 알려주고, 만약 Drop이 되는 경우 간단한 이유도

  설명된다. ICMP의 경우 Port 번호가 사용되지 않고, 출발지 정보 뒤에 <Type> <Code> 정보를 입력한다.

 


## Time-range 옵션 ##

Time-range 옵션을 사용할 경우, Access-list가 활성화 되는 시간을 정의할 수 있다.

 

ASA]

## Time-range 걸기

방법1] ASA

Time-range Work_Time

periodic weekdays 09:00 to 18:00

 

## 만약 이게 어렵다 싶으면 GUI로 걸면 된다.

방법2] GUI

이렇게 설정해놓으면 근무시간 외에는 집에 가게 만들 수 있음.

 

## 근데 학습하는 과정이므로 GUI 말고, ASA로 해보기.

show clock

 

 

show access-list        ## www

line 2가 Web 관련 정책이므로 line 2를 지울것임!

 

no access-list OUTSIDE_IN line 2 extended permit object-group WEB_S any object WEB_SVR

access-list OUTSIDE_IN line 2 permit object-group WEB_S any object WEB_SVR time-range Work_Time

 

 

Kali]

www.kedu.edu 접속 

## Kali에서 현재 인터넷에 접근할 수가 없음. 뺑뺑 돌면서 계속 찾고만 있다. 사진에서는 잘 못 찾겠지만 계속 빨간원이

    돌고있으면서 찾고있음.

     시간을 Work-time으로 바꿔주자.

 

 

show access-list OUTSIDE_IN

현재 07시가 아니므로 Inactive 되어 있는 것임. 시간을 바꿔야 한다!!!

 

 

clock set 16:31:00 16 july 2021

show clock

 

 

show access-list OUTSIDE_IN


## TCP 트래픽 제어 - SYN Flooding 공격 방어 ##

## Web서버야 너 80번 열어.

    내가 접속할테니까 포트 열어라. -> SYN만 계속 보냄 -> 그래서 서버가 포트를 계속 열고 기다리게해서

    서버를 바쁘게하는 해킹임.

 

 

## Kali(Hacker)에서 Web Server를 공격을 해보자 ##

Kali]

hping3 --rand-source www.kedu.edu -p 80 -S          ## Port number가 80번이다. S는 Sync flooding을 해라.

## 지금이 16:38이므로 9시부터 18시 사이니까 접속이 가능하다.

 

 

Start capture - tcp.port == 80

 

## SYN만 계~속 간다!! 이게 SYN Flooding 공격임.

 

 


CentOS]

netstat -lntp          ## netstat (전체정보),  netstat -lntp (요약정보)

## 전부 SYN_RECV 상태인것을 확인할 수 있다. (SYNC_RECEIVE)

 

Kali]

Cntl+C             ## 공격중단 

 

CentOS]

netstat

## 다시 확인!!

## 아까와는 다르게 현격히 적은 숫자의 'SYN_RECV'가 나타났다. 10개 이하면 웹 페이지에서 정상적인 상태이다.


## SYN Flooding 방어 ##

ASA]

class-map HTTP_C

  match port tcp eq 80

 

policy-map Deny_Syn_Flood

  class HTTP_C

    set connection embryonic-conn-max 10       ## 80번 포트를 half open 상태로 10개까지만 허용하겠다! 라는 뜻임.

                                                               ## 열어달라고 하면 원래 'Half open'상태로 기다리게 되는데 이것을

                                                                    무한정으로 기다리지 않고 10개까지만 기다린다는 뜻임.

 

service-policy Deny_Syn_Flood interface Outside


Kali] - 재공격

hping3 --rand-source www.kedu.edu -p 80 -S

Start Capture - tcp.port == 80
10개의 Syn을 받은 뒤부터는 더 이상의 Syn_Recv 상태가 아니다. 더 이상 열어주지 않음!!

## SYN 10개마다 잠시의 소강상태가 생겨야 한다.

 

 

Syn Flooding 해킹 및 방어 끝.