공부..

Powershell을 사용한 간단한 Port Scanning

SKUSTI 2024. 6. 3. 02:23
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 상태인 것을 확인 가능