오래전에 만든 내용인데 막상 쓸려니 안보여서 백업 받은 데이터 꺼내서 올립니다.
파일서버를 이해하는데 도움이 될 듯하여..
네트워크에 가장 많이 사용되고 있으며 가장 많은 관심을 가지고 있는 것 또한 파일 서버입니다. 이러한 파일 서버를 어떻게 관리 하는 것이 안전하게 관리하는 것인가 또한 문제가 발생할 때에 대처 방안은 무엇인가 많은 사람들이 고민하고 있죠.
파일서버에 흐름을 분석 할 수 있다면 바로 이러한 문제 발생시 대처가 가능하다고 본인은 생각합니다.
서버와 클라이언트의 모든 구성요소부터 실제 접속 환경까지의 모든 것을 살펴 본다면 해당 문제에 대한 접근을 보다 용이하게 할 수 있으며 또한 그에 맞는 적절한 대처가 가능하다고 생각합니다.
아래 환경을 각자 만들어 보고 직접 테스트를 해 본다면 보다 정확한 이해가 되지 않을까 해서 구축 환경부터 자세히 적었습니다.
같이 한번 해 보시죠
1. 파일 서버 테스트를 위한 환경 구축
해당 컴퓨터의 IP와 MAC 주소를 정리해 놓으면 테스트할 때 편리하며 이러한 디자인을 많이 그리게 되면 차후 네트워크 다이어그램을 그릴 때 도움이 됩니다.
(디자인은 계속 연습이 필요한 것이죠)
2. 파일서버 서비스와 클라이언트 서비스
서비스 하면 우리는 서버 서비스만 생각합니다. 왜 클라이언트 또한 서비스가 있다고 생각하지 못하는지 실제 신규 서비스 도입하게 되면 서버 서비스를 설치 하는데 걸리는 시간보다 클라이언트의 환경을 변경하는데 더 많은 시간과 비용이 들어가는 것을 알 수 있습니다.
예를들어 회사에 도메인 환경을 구축하고자 한다면 클라이언트는 도메인 참여를 해야겠죠 모든 클라이언트가 도메인 참여를 하게 될 때 그에 맞는 환경 설정을 해야 하는 시간이 더 많이 걸리는 것과 같은 이치 입니다.
위의 화면에서 보듯이 파일서버에도 네트워크용 클라이언트 서비스가 있습니다.
이러한 서비스가 설정되어 있지 않다면 클라이언트는 서비스를 이용 할 수 없게 됩니다.
3. NetBIOS 이름 서비스 분석을 통한 파일서버의 NetBIOS 환경 분석
NetBIOS 명령어를 이용하여 현재 해당 서버에 서비스를 확인하고 있습니다.
이 컴퓨터의 Microsoft 네트워크용 파일 및 프린터 공유 서비스를 하는 것을 알 수 있죠
WIN2003 <20> UNIQUE Registered
C:\>nbtstat -n
로컬 영역 연결:
Node IpAddress: [10.10.4.200] Scope Id: []
NetBIOS Local Name Table
Name Type Status
---------------------------------------------
WIN2003 <00> UNIQUE Registered
WIN2003 <20> UNIQUE Registered
NW <00> GROUP Registered
NW <1C> GROUP Registered
NW <1E> GROUP Registered
NW <1D> UNIQUE Registered
..__MSBROWSE__.<01> GROUP Registered
NW <1B> UNIQUE Registered
파일 및 프린터 서비스를 설치 하지 않고 Client 서비스만 설치되어 있는 상태라면 아래와 같이 바뀌게 됩니다.
C:\>nbtstat -n
로컬 영역 연결:
Node IpAddress: [10.10.4.200] Scope Id: []
NetBIOS Local Name Table
Name Type Status
---------------------------------------------
WIN2003 <00> UNIQUE Registering
클라이언트 서비스를 설치 하지 않고 서버 서비스만 설치 되어 있는 상태입니다.
C:\>nbtstat -n
로컬 영역 연결:
Node IpAddress: [10.10.4.200] Scope Id: []
NetBIOS Local Name Table
Name Type Status
---------------------------------------------
WIN2003 <20> UNIQUE Registered
4. VB 스크립트를 통한 파일 및 프린터 서비스 분석 방법
스크립트를 실행해서 해당 컴퓨터의 IP와 파일 공유와 프린터 공유 상태를 알아낼 수 있다면 상당히 편리 하겠죠. 아래 그림은 바로 결과를 보여주는 그림 입니다.
해당 소스
strComputer = "."
' . 대신 컴퓨터 이름을 집어 넣으면 원격에서 컴퓨터의 정보를 볼수 있습니다.
'관리자 권한이어야만 가능하겠죠
' WMI 형식의 쿼리를 통해 해당 컴퓨터에게 질의를 하고 있습니다.
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
Wscript.Echo "Computer Name : " & objComputer.Name
Next
' 해당 컴퓨터의 IP 주소를 얻기 위한 절차 입니다.
' IP 주소가 여러개인 컴퓨터도 존재 합니다. 그러한 경우 모든 IP를 알 수 있습니다.
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
WScript.Echo "IP Address : " & IPConfig.IPAddress(i)
Next
End If
Next
' 공유 정보를 확인하고 있습니다.
' 대부분의 컴퓨터는 파일 및 프린터 서비스를 하고 있습니다.
' 그렇다고 현재 서비스를 하고 있다고 볼 수는 없겠죠.
' 실제 공유 유무를 판단하는 것이 중요합니다.
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")
int p=0
int s=0
For each objShare in colShares
If objShare.Type = 0 or objShare.Type = 1 Then
If objShare.Type = 0 Then
If objShare.Name <> "print$" Then
s=s+1
End If
Else
p=p+1
End If
End If
Next
' 이제 모든 판단이 끝났으면 서비스 유무를 나타내야 겠죠.
If s>0 Then
Wscript.Echo "Service : File Service"
End If
If P>0 Then
Wscript.Echo "Service : Print Service"
End If
If s=0 and p=0 Then
Wscript.Echo "Service : "
End If
' 실행을 해보시면 당신의 컴퓨터의 IP와 공유 유무를 판단 하실 수 있습니다. 5. UNC 경로를 통한 클라이언트와 파일서버 연결
네트워크에 연결하는 방법은 여러가지가 있겠죠. 그 중 우리가 많이 사용하고 있는
UNC(\\서버이름\공유이름) 경로를 이용하여 연결하겠습니다.
연결을 하게 되면 사용자 확인을 하게 되죠.
물론 도메인 환경에 도메인 사용자이면서 권한이 있다면 이러한 절차가 내부적으로 이루어지게 되겠죠. 그러나 그것 또한 인증 절차에 의해 접속이 된 것 입니다.
모든 인증이 끝나면 아래와 같이 연결이 되겠죠
연결을 확인해 볼까요 서버에서 연결을 확인하는 방법 2가지만 알려 드리죠
하나의 방법은 명령어를 통한 연결 확인 방법입니다. 이 방법을 이용하여 예약작업을 하시면 파일서버에 어떠한 사용자가 어떠한 컴퓨터로 우리 서버에 접근하는지를 Log로 남겨 둘수 있게 됩니다.
C:\>net session
컴퓨터 사용자 이름 클라이언트 유형 열린 수 유휴 시간
----------------------------------------------------------------
\\LEEWJ ADMINISTRATOR Windows 2002 Serv 0 00:02:20
명령을 잘 실행했습니다.
또 다른 방법은 컴퓨터관리 도구를 이용하는 방법이죠
GUI 도구가 보기는 편할 수 있으나 예약작업은 명령어가 편리 하겠죠
6. 네트워크 모니터로 파일 서버에 연결한 패킷 분석
네트워크에 연결하기 위한 서비스와 파일서버에 접근하였습니다. 과연 이것이 다는 아니겠죠 바로 실제 네트워크 상에 데이터가 어떻게 주고 받았는지를 살펴보는 시간이 필요할 것입니다.
단순하게 서버에 접근하기만 한 상태입니다.
여기서 파일을 주고 받는 행위를 하게 되면 보다 많은 패킷들이 발생하겠죠.
1) 파일서버 찾기
UNC Path를 통해 서버에 요청하게 되면 NetBIOS를 이용하여 서버를 찾게 됩니다.
패킷을 살펴보면 UDP 137번 포트를 사용하여 NBT(NetBIOS Over TCP/IP) 쿼리를 하고 있는 것을 알 수 있습니다.
이때 사용한 방법은 브로드캐스트를 이용하고 있죠. 이러한 브로드캐스트를 줄이기 위해 WINS 서비스를 사용하게 되면 브로드캐스트 트래픽을 줄일수 있게 됩니다.
역시 IP나 NetBIOS 이름만 안다고 통신은 되지 않습니다. 바로 MAC 주소를 알아야겠죠.
물론 ARP Cache에 의해 서로간의 MAC Address를 알고 있다면 위의 과정은 생략됩니다.
이제 파일서버를 찾은거 같군요 패킷을 자세히 보시면 브로드캐스트가 아닌 유니캐스트인 것을 확인할 수 있습니다.
파일을 주고 받는 경우는 신뢰성이 중요한 문제겠죠. 그래서 TCP 139번 포트를 이용하여 NBT 연결을 확인하고 있군요.
패킷의 중간을 보시면 seq(sequence number)와 ack(acknowledge)통해 상대방을 확인 하려고 하는 것을 알 수 있습니다. 우리가 이러한 절차를 TCP의 3-way handshake라고 합니다.
실제로 FTP 서버는 TCP 20번, 21번 Port를 사용하여 파일을 전송하는 것을 알 수 있습니다.
ack를 확인해 보면 그전의 seq 보다 1 증가된 것을 알 수 있습니다.
해킹의 한 방법인 TCP 싱크 공격이 바로 이 방법을 이용한 것으로 유명하죠
(싱크 공격 : TCP의 성격상 정상적인 Seq라고 판단되면 무조건 Ack를 보내는 성격을 이용한 DoS 공격의 한 형태)
클라이언트가 드디어 서버에 연결 요청을 하고 있군요.
클라이언트 컴퓨터 이름 뒤에 <00> 이라는 NetBIOS 형식을 이용하고 있다는 것을 알 수 있습니다.
요청에 의한 연결승인을 확인 할 수 있습니다.
NTLM 방식을 통한 사용자 인증 요청을 하고 있군요.
서버 메시지 블록(SMB)은 Windows가 파일, 프린터 및 직렬 포트를 공유하는 데 사용하는 인터넷 표준 프로토콜입니다. SMB는 명명된 파이프와 메일 슬롯을 사용하여 컴퓨터 간에 통신하는 데도 사용됩니다. 네트워크로 연결된 환경에서 서버는 파일 시스템과 리소스를 클라이언트가 사용할 수 있도록 합니다. 클라이언트는 리소스에 대해 SMB 요청을 수행하고 서버는 클라이언트 서버 요청 응답 프로토콜로 SMB 응답을 수행합니다.
SMB 프로토콜은 파일, 프린터, 메일 슬롯, 명명된 파이프, API를 액세스하는 데 사용됩니다.
SMB 명령은 일반적으로 다음 4부분으로 분류할 수 있습니다.
세션 컨트롤, 파일 명령, 인쇄 명령, 메시지 명령
NTLM 을 이용한 세션 컨트롤이 계속 되고 있습니다.
사용자 인증 방법은 2가지가 있죠 NTLM과 Kerberos방법이죠.
Windows 2000 이상의 도메인 환경에서 클라이언트도 Windows 2000이상의 클라이언트가 도메인의 멤버인 경우 이 경우를 제외한 경우는 모두 NTLM 인증이라고 생각 하시면 됩니다.
인증 요청에 대한 승인 값을 보내고 있습니다.
이제 연결을 시도 하는 군요
User ID 등을 통해 인증이 되었군요.
IPC는 원격으로 클라이언트가 접속을 해서 서비스를 요청 할 때 요청에 따른 임무를 수행하기 위해서 운영체제에서 체택한 알고리즘입니다.
권한이 부여된 클라이언트가 접속을 해서 서비스를 할 경우 연결을 시켜주고 네트워크 세션이라는 것을 발행을 해서 임시로 저장을 합니다.
간단히 예기해서 공유자원에 접근을 시도 하고 있는 것이죠
이제 SMB의 파일 명령으로 가볼까요
자원의 접근 허락 및 권한을 부여하고 있는 것을 알 수 있습니다.
파일에 대한 접근 권한요청을 하고 있군요
파일 오픈을 허락해 주고 있습니다.
RPC를 설명하는 가장 간단한 예는 다른 컴퓨터에서 처리 중인 리소스를 사용하는 요청입니다. RPC 프로토콜을 사용하면 한 프로세스가 네트워크의 다른 컴퓨터에 위치한 또 다른 프로세스의 명령을 실행하도록 요청할 수 있습니다.
RPC 프로세스는 다음과 같은 요소로 구성됩니다.
- 클라이언트 응용 프로그램 : 원격 실행을 요청합니다.
- 클라이언트 스텁 : 호출을 표준 네트워크 표시(NDR) 형식으로, 표준 네트워크 표시(NDR) 형식을 호출로 번역합니다.
- 클라이언트 RPC 런타임 라이브러리 : NDR을 네트워크 메시지로 변환합니다. 네트워크 전송: 네트워크 통신을 처리합니다.
- 서버 RPC 런타임 라이브러리 : NDR을 네트워크 메시지로 변환합니다.
- 서버 스텁 : 호출을 표준 네트워크 표시(NDR) 형식으로, 표준 네트워크 표시(NDR) 형식을 호출로 번역합니다.
- 서버 응용 프로그램 : 요청된 명령을 실행합니다.
RPC 프로시저는 인터페이스 번호(UUID), 작업 번호(opnum), 버전 번호로 고유하게 식별됩니다. 인터페이스 번호는 관련 원격 프로시저 그룹을 식별합니다.
MSRPC를 패킷을 보면 Bind 요청을 하고 그에 따른 Ack 승인이 있은 후 실재 행위 Request와 그에 따른 Response를 하는 것을 알 수 있습니다.
파일서버를 생각하면 간단하게 네트워크가 되는 것 같아도 실제 내용을 살펴보면 위와 같은 여러 개의 절차가 내부적으로 진행되게 됩니다.
엔지니어가 굳이 이러한 것들을 알고 있어야 하냐고 반문하시는 분들이 있을 수 있습니다.
그러나 만약 문제가 발생하게 된다면 옛날의 습성대로 다시깔어(OS 재 설치), 껏다 켜 (컴퓨터 리부팅) 등의 용어로 해결 할 수는 없을 것입니다.
.
댓글