보안 네트워크 구축을 통한 서비스 연결 토폴로지 구축

Hyun·2025년 6월 12일

프로젝트

목록 보기
3/6
post-thumbnail

프로젝트 목표

  • GN3와 네트워크 관리/보안 도구를 활용한 실시간 위협 탐지-대응 체계 구축
  • 네트워크 기본 설정 -> 보안 구성 -> 자동화 기술 통합 3단계 실습 프로세스 설계

네트워크 구성도

  • 장비 : Cisco 스위치/라우터, 우분투 서버, 칼리 리눅스,클라이언트 장비
  • 연결 : NAT(외부망, 실제 인터넷 연결)
  • 네트워크 토폴로지

기대 효과

  • 네트워크 자동화 능력 숙달
    • Netmiko/Python을 이용한 장비 관리
    • 한 번에 여러 네트워크 장비의 설정을 변경함으로써 Ops 생산성 향상
  • 실전형 보안 분석 기술력 강화
    • '공격 시물레이션 -> 패킷 분석 -> ACL 적용' 의 종합적인 보안 대응 학습
  • 라우팅 프로토콜에 대한 이해 향상

Chap 1 : 서버 설정, 내부망 구축, netmiko를 이용한 자동화 활용

내부 서버 영역 설정

  • 주어진 네트워크 토폴로지에 먼저 ip 값을 할당한다.
  • 이후 내부 서버(192.168.20.2)에 Telnet,SSH,http(s) 기능 활성화를 수행한다.
    • 장비에서 원격으로 장비에 접속할 수 있는 '채널' 설정 : line vty 0 4
      • 장비 자체에 저장된 사용자 이름과 비밀번호를 저장 : login local
      • telnet,ssh 활성화 : transport input telnet ssh
    • 내부 서버에서 서비스 접속을 위해 유저 이름, 비밀번호 생성 : username hyun privilege 15 secret proj2
    • http(s) 기능 활성화
      ip http server
      ip http secure-server
      ip http authenication local
  • 별도의 웹서버(192.168.20.3)도 파이썬을 이용해 실행 : python3 -m http.server 80

내부망 외부망 연결

  • RIP 프로토콜을 사용하여 내부망과 외부망을 연결한다.
  • 설정 방법
    • 라우터 설정 창에서 router rip 를 통해 RIP 프로토콜 생성
    • 자동 축약 사용 X : no auto-summary
    • 버전 2 사용 : version 2
    • 인접 라우터의 네트워크 주소를 통해 연결 : ex)network 192.168.20.0

자동화 활용

  • netmiko는 네트워크 장치에 대한 CLI 연결을 단순화 하기 위한 멀티 벤더 라이브러리다.
  • 네트워크 자동화의 경우에는 show 명령어 실행을 통해 장비의 상태를 확인하거나, 설정 파일 변경 작업을 주로 수행한다.
  • 사용자가 네트워크 장치를 직접 제어하는 것보다 더 쉽게 제어할 수 있게 도와준다.
  • 이번 프로젝트에서는 파이썬 코드를 이용해 간단하게 자동화 작업이 어떻게 동작하는지 배워보고자 한다.
    • 먼저 해당 장비에 연결된 IP 상태를 확인
    • 이후 loopback 인터페이스 활성화를 위한 설정 추가
    • 마지막으로 loopback 인터페이스가 활성화 되어있는지 다시 확인
  • 우분투에 netmiko 라이브러리를 설치 : sudo apt install python3-netmiko
  • 파이썬 코드

Server = {
    "device_type" : "cisco_ios",
    "host" : "192.168.20.2",
    "username" : "hyun",
    "password" : "proj2",
    "global_delay_factor" : 2,
}

net_connet = ConnectHandler(**Server)

#change setting
commands= ["int loopback 0","ip add 1.1.1.1 255.255.255.0"]

with ConnectHandler(**Server) as net_connet:
    # show ip table
    print(net_connet.send_command("show ip int br"))
    print(net_connet.find_prompt())
    output = net_connet.send_config_set(commands)
    print(output)
    # show ip table
    print(net_connet.send_command("show ip int br"))
    print()

net_connet.disconnect()

아래는 실행 결과 사진이다.

Chap 2 : 포트 스캐닝

  • 칼리 리눅스에서 nmap 도구를 이용해서 대상 서버의 서비스와 연린 포트를 확인해본다.
  • nmap 으로 가장 일반적으로 사용되는 옵션은-sS 이다. 이는 TCP 3way handshake를 완료하지 않고 SYN 패킷을 보내고 SYN/ACK를 받으면 해당 포트가 열려있다고 판단하게 된다.
  • 과거에는 IDS(Intrusion Detection System)에서 감지하지 못했지만 요즘은 대부분 탐지가능하다.
  • 외부 사용자(우분투)에서 내부 서버 네트워크 주소로 포트 스캐닝을 시도해본다.
  • 내부 네트워크(192.168.20.0/24) 상에서 3개의 장비가 감지되었고 각각 포트가 어떤게 열려있는지 볼 수 있다.
  • 각 장비에 대해서 자세하게 확인하고싶다면 -A 옵션을 통해서 다시 포트스캐닝을 수행한다.
    • A 옵션을 통해서 열러있는 포트와 서비스 정보를 더 자세하게 확인할 수 있다.
    • 또한 운영체제 정보 및 장비까지의 패킷 경로 등도 확인할수 있다.
    • 192.168.20.2 주소의 장비의 경우 22,23,80,443 포트가 열려있으며,Cisco IOS를 사용하는 것을 보아 시스코 라우터 장비인 것을 파악할 수 있다. 또한 해당 장비까지의 거리가 5 hop이 떨어져 있는 것도 파악 가능하다.

Chap 3 : 무차별 대입공격(Brute force Attack) 및 접속 테스트

  • 무차별 대입 공격은 특정 시스템이나 서비스에 접근하기 위해 사용자 이름, 비밀번호, 또는 암호화 키 등의 가능한 모든 조합을 체계적으로 시도하여 올바른 값을 찾아내는 기법이다.

  • 이러한 무차별 대입 공격은 네트워크 보안 평가 및 침투 테스트 과정에서 시스템의 인증 메커니즘의 강도를 평가하고, 취약한 계정을 식별하는 주요 방법 중 하나로 활용된다. 이를 통해 기업이나 조직은 실제로 발생할 수 있는 잠재적인 보안 위험을 미리 파악하고 대응 방안을 마련할 수 있다.

  • 무차별 대입 공격은 대상 시스템에 대한 특별한 내부 권한이나 복잡한 기술적 취약점 지식 없이, 네트워크를 통해 접근 가능한 서비스의 로그인 기능을 활용하는 직관적인 공격 기법이다. 이는 원리적으로 가장 이해하기 쉬운 공격 방식 중 하나로 볼 수 있으며, 필요한 권한 또한 일반 사용자 수준의 로그인 시도만 요구한다.

  • 이전 단계를 통해 내부 서버에 있는 장비들을 대상으로 medusa 도구를 이용해서 무차별 대입 공격을 수행한다.

  • medusa 설치 : sudo apt isntall medusa

  • 우분투에 미리 다양한 단어를 생성해놓는다.

  • 무차별 공격 수행 : medusa -h 192.168.20.2 -U word.txt -P word.txt -M ssh -t 32 -O successful_logins.txt

    • h : 타겟 주소
    • M : 서비스 종류
    • U : 아이디 파일
    • P : 비밀번호 파일
    • t : 스레드 종류
    • O : 성공 시 해당 파일에 저장
  • 무차별 대입 공격으로 획득한 정보를 사용하여 장비에 접속을 시도해본다.

Chap 4 : 패킷 캡처 및 분석

  • 스위치에서 SPAN(Switched Port Analyzer) 설정을 구성한다.
  • SPAN은 특정 포트나 VLAN을 통과하는 네트워크 트래픽의 복사본을 다른 포트(모니터링 포트)로 보내는 기능이다.
  • 이를 이용해 네트워크 트래픽을 분석하거나, 침입 탐지 시스템(IDS), 네트워크 성능 모니터링(NPM) 도구, 패킷 스니퍼 등 보안 및 모니터링 장비로 트래픽을 전송하는 데 사용된다.
  • 프로젝트에서는 SW-1에서 내부로 들어오는 인터페이스 G0/1에 정보를 복사하여 보낸다.
monitor session 1 source interface Gi0/1
monitor session 1 destination interface Gi0/0
  • 스위치 인터페이스 g0/0과 연결되어있는 우분투 도커 컨테이너를 통해 들어오는 10개의 패킷들을 캡처한다. : tcpdump -i eth0 -c 10 -w output.pcap
  • 위에서 수행했던 무차별 대입공격을 다시 수행해보면 패킷들이 output.pcap에 저장되어있는 것을 확인할 수 있다.
  • 캡처된 패킷을 tcpdump -r output.pcap을 통해 확인해보자.
  • 외부 공격자(172.16.10.254)에서 내부 서버(192.168.20.2) 22번 포트를 향해 지속적으로 접속을 시도하는 것을 포착할 수 있다.

Chap 5 : 내부 라우터 보안 강화

  • 패킷 캡처를 한 뒤, 해당 패킷을 분석하고나서 지속적으로 내부 서버에 공격이 들어오는 것을 확인했다. 이제 우리는 이에 대한 대비책으로 내부 라우터에 대한 보안을 강화시켜야할 필요가 있다.
  • 많이 사용되는 방법이 특정 네트워크 주소를 차단하는 방법이 존재한다. ACL(Access Control List)를 이용해서 외부(공격자)에서 서버로 들어오는 패킷을 차단하고 내 부에서 시작하는 패킷은 허용하도록 설정할 수 있다.
  • 라우터 설정 창에서 접속 후 ACL를 생성한다.
    ip access-list extended DENYList
    deny   tcp 172.168.10.0 0.0.0.255 any eq 22 log DENY_ssh
    deny   tcp 172.168.10.0 0.0.0.255 any eq telnet log DENY_telnet
    deny   tcp 172.168.10.0 0.0.0.255 any eq www log DENY_http
    deny   tcp 172.168.10.0 0.0.0.255 any eq 443 log DENY_https
    deny   icmp 172.168.10.0 0.0.0.255 any log DENY_icmp
    permit icmp any any
    permit tcp any any
  • 생성한 ACL 를 인터페이스 적용 시킨다. : ip access-group DENYList in
  • ACL 설정 전후 네트워크 동작 변화를 확인해보면 공격자가 내부 서버로 들어오는 것을 차단되었다는 것을 볼 수 있다.

이번 프로젝트를 통해서 우리는 장비의 설정 자동화과정을 수행해보았고, 또한 외부로부터 무차별 공격을 받았을 때, 패킷을 캡처하여 패킷 분석을 수행했으며 보안 대책으로 ACL을 적용해보는 과정을 수행해보았다.

profile
DevSecOps & Cloud Engineer를 꿈꾸는 엔지니어

0개의 댓글