공부..
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
- Well Known Port : 0 ~ 1023
- 16bit로 이루어져 있으며 총 65536개의 port number가 존재
Port Scan
- What is Port Scan
- 네트워크에 어떤 포트가 열려 있고, 데이터를 주고 받을 수 있는지 확인하는 방법
- 호스트의 특정 포트에 패킷을 보내고 응답을 분석하여 취약점 식별하는 프로세스
- 사용 방식
- TCP Open Scan (TCP Connect Scan)
- TCP 3-way hand shake를 완전히 수행하여 Port의 개방 여부를 확인 가능
- 상대적으로 많은 리소스를 사용하고 방화벽에 의해 탐지 될 가능성이 높음
- 더 진화된 형태로 Half-Open이나 SYN Scan, Xmas Scan 등이 존재
- TCP Open Scan (TCP Connect 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
실습 진행
- Virtual Mahcine의 IP를 입력하고 ping이 보내지는지 테스트, 스크립트를 실행하여 22번 포트가 열려있는지 확인 가능
- Virtual Machine에서 22번 port에 대한 방화벽 규칙 추가 및 해당 port를 사용하는 프로세스 종료
- Local Machine에서 Port Scan 스크립트 재실행, 결과로 22번포트가 닫힌 것을 확인 가능
- 22번 포트를 사용하면 sshd의 Status가 Stooped 상태인 것을 확인 가능