본문 바로가기

공부..

Powershell을 사용한 간단한 Port Scanning

Used Version
Host OS Windows 11
Virtual Machine OS Windows 10
VM Ware VMWare Workstaion Pro 17
Powershell PowerShell 5.1

진행 방식

가상머신에 설치한 Windows 10 환경에 Open-SSH Server를 설치하여 22번 Port를 Open하고 Host OS에서 작성한 Powershell Script를 사용하여 열려있는 Port를 찾아볼 것입니다.

추가적으로 가상머신에서 추후 할 수 있는 조치에 대해서도 확인해 볼 예정입니다.


Setting

Host

  • IP Address (Command : ipconfig)
  • Virtual Network Editor

Virtual Machine

  • IP Address (Command : ipconfig)
  • Window Security -> Firewall & network protection -> Public network Off
  • Open SSH Server
    • 설치 방법
1. Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
2. Start-Service sshd
3. Set-Service -Name sshd -StartupType 'Automatic'
4. New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
  • 설치 결과

Port & Port Number

  • What is Port
    • 네트워크 서비스나 특정 프로세스를 식별하는 논리단위이자 네트워크 연결이 시작되고 끝나는 가상지점
  • What is Port Number
    • 16bit로 이루어져 있으며 총 65536개의 port number가 존재
      • Well Known Port : 0 ~ 1023
        • SSH : 22 (TCP)
      • Registered Port : 1024 ~ 49151
      • Dynamic Port : 49152 ~ 65535

Port Scan

  • What is Port Scan
    • 네트워크에 어떤 포트가 열려 있고, 데이터를 주고 받을 수 있는지 확인하는 방법
    • 호스트의 특정 포트에 패킷을 보내고 응답을 분석하여 취약점 식별하는 프로세스
  • 사용 방식
    • TCP Open Scan (TCP Connect Scan)
      • TCP 3-way hand shake를 완전히 수행하여 Port의 개방 여부를 확인 가능
      • 상대적으로 많은 리소스를 사용하고 방화벽에 의해 탐지 될 가능성이 높음
        • 더 진화된 형태로 Half-Open이나 SYN Scan, Xmas Scan 등이 존재

Network Profile

  • Domain Network
    • 회사와 같은 조직에서 주로 사용하며 도메인 관리자가 설정한 정책에 따라 관리됩니다.
  • Private Network
    • 사설 네트워크라고도 불리며 보안수준은 Public Network에 비해 떨어지는 편입니다.
    • 가정이나 소규모 사무실에서 주로 사용되며 몇몇 연결을 허용하는 설정이 존재할 수 있습니다.
    • 네트워크 내 다른 장치들과 비교적 쉽게 통신할 수 있습니다.
  • Public Network
    • 공용 네트워크라고도 불리며 보안 수준이 Private Network에 비해 높습니다.
    • 대부분의 연결을 차단하며 외부 장치가 사용자의 컴퓨터에 접근하지 못하게 합니다.

Powershell Script

  • Port Scan
function Test-Port {
    param (
        [string]$ComputerName = "10.10.10.29",
        [int]$StartPort,
        [int]$EndPort
    )

    for ($port = $StartPort; $port -le $EndPort; $port++) {
        $tcpclient = New-Object System.Net.Sockets.TcpClient
        $connection = $tcpclient.BeginConnect($ComputerName, $port, $null, $null)
        $result = $connection.AsyncWaitHandle.WaitOne(100, $false)

        if ($result -eq $false) {
            Write-Host "Port $port is closed"
        } else {
            Write-Host "Port $port is open"
            $tcpclient.EndConnect($connection) | Out-Null
        }

        $tcpclient.Close()
    }
}
  • 사용법Test-Port -StartPort 80 -EndPort 90
  • Test-Port -ComputerName 10.10.10.29 -StartPort 80 -EndPort 90

실습 진행

  1. Virtual Mahcine의 IP를 입력하고 ping이 보내지는지 테스트, 스크립트를 실행하여 22번 포트가 열려있는지 확인 가능
  2. Virtual Machine에서 22번 port에 대한 방화벽 규칙 추가 및 해당 port를 사용하는 프로세스 종료
  3. Local Machine에서 Port Scan 스크립트 재실행, 결과로 22번포트가 닫힌 것을 확인 가능
  4. 22번 포트를 사용하면 sshd의 Status가 Stooped 상태인 것을 확인 가능

'공부..' 카테고리의 다른 글

Tsharksc  (1) 2024.01.02