![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
㈜안랩코코넛 SM사업부 시큐리티엔지니어, 송진호주임 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GUI 로 친숙한 방화벽 정책 설정을 하면 되는 것을 왜 궂이 CLI로 하려고 하는지 묻는다면 설정에 대한 재미도 있을 수 있고 GUI로 보지만 가끔 시스템 상에 문제가 되었을 때 GUI가 열리지 않는다거나 숨겨진 방화벽 설정을 볼 때에는 이 netsh 를 이용하여 설정하는 방법도 매우 빠르며 유용 할 수 있다. netsh 는 비단 방화벽만 설정 할 수 있는 것이 아닌 RAS, NAT, OSPF도 설정을 할 수 있다. 요즘 들어 MS 운영체제의 취약성을 이용하여 웜 감염 후 netsh를 이용하여 네트워크를 조작하는 수법도 존재한다. 그 이유는 GUI를 통하지 않고도 명령어를 통한 배치 파일로 DNS 조작도 시도 할 수 있으며, 악의적인 DNS 서버에 Domain Name 을 Query 할 때 악의적인 사용자가 미리 지정한 IP로 접속을 유도도 할 수 도 있기 때문이다. 이러한 기법은 파밍(Pharming) 기법으로도 응용할 수 있는 부분이다. Window Support Tool 로 사용하는 ipseccmd 를 (GUI로는 secpol.msc) 사용하여 in, outbound 로 포트에 대한 차단을 할 수 있다면, netsh 는 윈도우 XP 방화벽은 IP및 포트에 대한 inbound 그리고 어플리케이션 프로그램에 대한 in, outbound에 대한 차단 및 허용이 가능하다. 엄밀히 따져보면 Stateful Inspection 방화벽이라고 말하지만 Outbound에 대한 IP 및 포트 정책이 없는 방화벽이 과연 데이터 스트림까지 지원하는 Stateful inspection 방화벽이라고 하기엔 조금 미흡한 점이 있지 않나 싶다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
netsh 를 사용하는 것은 위의 그림처럼 클릭 할 때의 설정과 그 결과값이 똑같다. CLI 를 싫어하시는 분들이 많을지 모르나 시간, 속도, GUI로 볼 수 없는 숨겨진 기능을 볼 수 있다는 장점이 있다. 즉 한눈에 일목요연하게 보고 싶거나 정보 수집용으로도 손색이 없을 것이다. 각 구문만 쉽게 눈에 들어오고 익힌다면 빠른 설정을 할 수 있을 것이다. 네트워크 방화벽처럼 윈도우 방화벽 설정시에 기본적인 정책은 Deny 이다. (방화벽을 enable 시켰을 때) 윈도우 시작->실행->cmd->netsh 를 TYPE 해 보자. 아래의 실제 방화벽 설정의 예제들을 보자. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
다음의 명령어를 보자.
눈여겨 볼 만한 명령어는 위 굵은 글씨체를 참고하라. 그럼 방화벽 정책을 설정하기 위한 Steb-by-Step을 해보자. ■ 현재 열려져 있거나 열려져 있지 않은 포트를 상세히 보려면 아래의 명령어를 사용. netsh firewall show portopening verbose = enable netsh firewall show portopening verbose = enable | findstr VNC 물론 verbose = disable 도 있지만, 궂이 상세하게 보지 않겠다는 옵션을 줄 필요는 없다. 실제, netstat 로 확인한 결과 Listening 된 포트가 있다 하더라도, 실제 열려진 포트를 보려면 위의 세 가지 명령어를 통하여 확연히 구분 지을 수 있다. 중복되는 내용들이 많지만 정확한 설정 값 및 포트 오픈 및 현재의 방화벽 상태를 확인하려면, 위의 세 명령어를 사용해도 무방할 것 같다. 아래의 규칙을 기억하자. (순서는 바뀌어도 상관은 없지만 대부분 이런 수순) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Subnet : 자신이 속한 네트워크 대역 - Custom : 일일이 접근 IP 또는 접근 네트워크 대역을 지정할 수 있다. - All : 모든 IP 및 네트워크 주소 본격적으로 방화벽 정책을 설정해 보자. set 은 현설정에 대한 편집이거나 추가이며, add 는 추가만 할 수 있다. 아래 예들은 모두 set 으로 설정 하였다. ■ 포트 오픈 하기 ≠ 서비스 오픈 ( set portopening 또는 add portopening ) 아래 그림을 보면 생성이 되어져 있음을 볼 수 있다. - netsh firewall show portopening | findstr VNC | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
구체적으로 이러한 포트 오픈은 내가 속한 네트워크 대역 서브넷(subnet)안에서만 허용하고 싶다면 조금 다르게 옵션을 설정을 해 주어야 한다. C:\>netsh firewall set portopening protocol = TCP port = 5800 name = VNC_HTTP scope = subnet mode = enable 확인됨 약자로 아래와 같이도 가능 하다 netsh f set p p=tcp p=5800 n=vnc_http s=sub m=en 해제시 : netsh f set p p=tcp p=5800 n=vnc_http s=sub m=dis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C:\>netsh firewall set portopening protocol = TCP port = 23456 name = Ahnlabcoconut_FTP scope = CUSTOM addresses = 192.168.1.3,LocalSubnet 확인됨 이것은 로컬 서브넷에서만 접근 가능하고, 외부 192.168.1.3 에서 이 서비스를 사용할 수 있다라는 뜻이다. GUI 에서는 아래와 같다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
참고 URL :mailto:http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/depfwset/wfsp2apb.mspx | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ 서비스 설정하기 ( set service 또는 add service) 서비스 종류는 아래와 같은 종류로 국한하기 때문에 서비스를 생성(포트 오픈)해야 할 필요성은 느끼지 못한다. (터미널 서비스 : TCP 3389 )
이 윈도우 XP 방화벽에서의 서비스는 말 그대로 윈도우가 제공해 주는 서비스를 말하고 실제 포트 오픈은 이전에 Bulit-in 된 원격데스크톱 및 원격지원 서비스에 V 체크만 하면 된다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
그림에서 보듯이 원격 데스크탑 및 원격 지원은 Windows 방화벽에서 삭제(D) 버튼을 누를 수 없다. 이는 아래 그림처럼 [내컴퓨터] ▶ [오른쪽 마우스 클릭] ▶ [속성] ▶ [원격] 부분. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
이 부분에 속해 있기 때문이다. 왜 이렇게 설정을 했는지는 잘 모르겠지만, 어쨌든 이 원격지원 부분과 원격 데스크톱 부분의 체크박스에 체크를 하지 않으면 아래 그림처럼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
자동적으로 체크 박스에 v 체크가 없어지는 것을 볼 수 있다. 하지만 이는 역으로는 성립이 되지 않는다. 즉 이 윈도우 방화벽에서의 원격 데스크톱이나 원격지원을 v 체크를 한다 하더라도, 시스템 등록정보에서의 [원격] 탭에서는 v 체크가 되지 않으면 외부에서 접속을 하지 못하게 된다. 결론적으로 이러한 서비스를 사용하기 위해서는 당연히 RDP 서비스는 띄워져 있어야 하며, 우선적용이 되는 시스템 등록정보에 대한 체크박스에 V 체크가 되어져 있어야 하는 것이다. 이 시스템 등록정보에 V 체크가 되지 않으면 TCP 3389 포트에 대하여 Listening 이 보이지를 않는다. 그런 이유에서 만약 외부에서 RDP 를 사용할 수 없거나, 원격지원을 사용할 수 없을 경우에는 이러한 서비스들이 윈도우 방화벽에서는 열려 있음에도 불구하고 서비스가 안 되면 시스템 등록 정보에서 확인을 하면 될 것이다. 1. Remote Desktop 서비스를 사용하려면 2. 원격 접속 관리를 사용하기 위해서는 ■ Application Program 오픈 하기 ( set allowedprogram 또는 add allowdprogram ) set allowedprogram program = C:\Temp\AhnSV.exe name = AntiVirus mode = | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
이러한 네트워크 설정은 여러 인터넷 검색 엔진 사이트에서 찾아 보며 참고하면 될 것 같다.네트워크 설정은 설명이 필요한 것 보단 이러한 환경이 필요한 곳에서 사용하면 더 할 나위 없이 유용하다. 같이 사용하는 IDC에서의 공유형 노트북(?)에서의 자신만의 고유 정적 IP가 있는 곳, 또는 DHCP로 사용해야만 하는 곳, 네트워크의 일부 GUI로 변경 없이 다음과 같은 명령어 행만으로 네트워크 설정을 쉽게 바꿀 수 있다. ■ 시스템 정보 및 네트워크 정보를 GUI로 결과를 보고 싶다! ■ IP 수동 변경 (Static) ■ IP 수동 변경 (로컬) ■ IP 자동 변경 ( DHCP ) ■ DNS 수동 변경(Static) ■ DNS 자동 변경 ( DHCP ) ■ 위와 같이 설정된 현재 네트워크 설정 저장 ■ 위 설정 그대로 사용 이러한 DOS Command 모드로써의 중요한 점은 GUI로 된 네트워크 설정의 마우스를 사용하지 못할 때 유용하다고 할 수 있다 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 내 컴퓨터에서 과연 어떠한 트래픽이 들어오고 나가고 Drop이 되는가? 이벤트 뷰어(eventvwr.msc)에서도 보안 설정을 하면 볼 수 있지만 더욱 상세하게 보여주는 것은 이 방화벽 로그일 것이다. 방화벽의 로깅 기능을 사용한다.물론 GUI도 있지만 여기선 netsh 만을 위주로 말하겠다. ■ 현재 로깅 설정 현황 보기 netsh firewall show logging ■ 로깅 설정하기 ( Drop 패킷 및 Connection 패킷 모두) netsh firewall set logging droppedpackets = enable connections = enable filelocation = 2nd.txt 4096 ■ 현재 로깅 되는 로그 보기 윈도우에서 로깅 되는 로그는 아래와 같다. 엑셀로 편집하여 나온 결과이다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- 위에서 본 결과처럼 Action 부분에서 Open, Drop, Close 로 현재의 방화벽에서 패킷이 어떻게 취해지는가에 대한 판단을 할 수 도 있을 것이다. 특히 TCP 의 Flag 를 볼 경우 Syn 을 보냈음에도 ACK가 Drop이 되지 않는지 혹은 ACK 자체를 볼 수 없는지에 대하여 판단 할 때, 내 자체 윈도우 방화벽에서 막혔는지 혹은 그 앞단의 방화벽 및 네트워크 장비에서 막혔는지도 판단을 할 수 있을 것이다. 2. 윈도우 XP에서의 트래픽 흐름을 전혀 볼 수 없고 알 수 없을 때 트러블 슈팅 할 때 가장 먼저 윈도우 자체 내장 방화벽을 Disable 한 상태로 확인을 한다. netsh firewall set opmode enable [방화벽을 설정할 때] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ TCP/UDP/ICMP Connection 및 통계 체크 우선 서비스에 Remote Access Service 가 시작되어 있어야 한다. 그런 후 아래와 같은 명령어로 현재의 연결 상태를 알아보자. - netsh interface ip show tcpstat : TCP 통계를 표시 ( netstat -s -v -p tcp ) - netsh interface dump : 인터페이스에 대한 현재 방화벽 설정 전체를 보여준다. 한글윈도우 XP Pro (SP2)에서의 netstat 와 netsh 의 차이점이 무엇이냐 하면, 결과를 보면 알겠지만 netstat 는 영문으로 결과를 보여주고 , netsh 는 친절하게도 한글로 보여준다는 것이다. |
netsh로 방화벽, 네트워크 구성