시놀로지 나스에 Apache Guacamole 설치하기

시놀로지 나스에 docker를 이용하여 Apache Guacamole을 설치하는 방법에 대해서 설명합니다.

 

Apache Guacamole은 웹브라우저로 원격데스크탑, VNC, SSH 등을 접속 가능하게 해주는 일종의 게이트웨이입니다. 공식 웹사이트에서는 아래와 같이 설명하고 있습니다.

Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.

위 동영상을 보면 무엇인지 쉽게 이해할 수 있습니다.  크롬에서 Guacamole이 구동 중인 특정 사이트에 접속하여 Windows를 원격 접속하고 있습니다.

Guacamole을 사용하면 원격접속하고자 하는 Windows의 RDP 포트를 외부에서 접근할 수 있도록 오픈할 필요가 없습니다. HTTP 또는 HTTPS 포트 하나만 오픈하면 Guacamole에 설정된 여러 대의 컴퓨터에 원격 접속할 수 있습니다.

(더 보기…)

502 Bad Gateway, in Response to SVN COPY with SSL off-loading

SVN 브랜치/태그 생성 시 아래와 같은 에러가 발생할 경우

502 Bad Gateway, in Response to SVN COPY with SSL off-loading

 

해결 방법

 

Destination 헤더의 https를 http로 교체시키는 방법으로 해결

 

HAProxy를 이용할 경우 Frontend 옵션에 아래 내용 추가하고, 재시작하면 됨

reqirep Destination:\ https(.*) Destination:\ http\\1

HAProxy Frontend 옵션 설정

 

(더 보기…)

SIP 인증 처리 / SIP Security

SIP는 HTTP 인증 방식에 기반을 둔 stateless, challenge-based 인증 매커니즘을 제공한다.

Inbound
Proxy Server  또는 UAS가 SIP 요청 메시지를 수신하면 UAC에게 identity assurance 제공을
요청한다. UAC가 인증되면 해당 SIP 요청을 수신한 UAS는 UAC가 권한이 있는지를 확인해야 한다.

HTTP 인증 방식에는 앞서 잠깐 언급하였듯이 Digest Mechanism과 Basic Mechanism 두 종류가 있다. 이 두방식에 대해 간략히 알아보자.

Basic Mechanism

HTTP 인증 방식중 Basic Mechanism은 사용자 ID와 패스워드를 일반 텍스트 기반으로 인증하는 방식이다. 이 방식은 사용하기 쉽고 간편하게 이용할 수 있지만, 사용자 ID와 패스워드는 유출될 가능성의 소지가 있다.

Digest Mechanism

이 방식은 Basic Mechanism과 마찬가지로 사용자 ID와 패스워드를 기반으로 클라이언트를 인증하는 방식이다. 다만 이 방식은 서버가 먼저 클라이언트에게 nonce 값을 할당하여 전송한다(challenge).

이를 수신한 클라이언트는 서버가 전송한 nonce 값의 체크섬(checksum)을 계산하여 해당 값을 다시 서버로 전송하여 인증절차를 밟는다(credentials).

보안이 필요한 시스템의 경우 상기에서 살펴본 바와 같이 Digest Mechanism(RFC 2617)을 사용하도록 하고, Basic Mechanism은 보안상 취약하여 사용시 면밀한 검토를 해야 한다.

다음은 SIP 인증 절차를 표현한 그림이다.

 

 

상기의 인증 절차를 단계별로 송수신되는 메시지를 예를 들어 기술하면 다음과 같다.

(1) REGISTER : UAC -> SIP Server

먼저 UAC가 SIP Server로 자기좀 등록해 달라고 SIP REGISTER 요청 메시지를 전송한다. 이때 전송되는 메시지 예는 다음과 같다.

REGISTER sip:sip.infravalley.comSIP/2.0
Via: SIP/2.0/UDP sonny.infravalley.com:5061;branch=z9hG4bKnashds7
Max-Forwards: 70
From: Monky <sip:sonny@infravalley.com>;tag=a73kszlfl
To: Monky <sip:sonny@infravalley.com>
Call-ID:
1j9FpLxk3uxtm8tn@sonny.infravalley.com
CSeq: 1 REGISTER
Contact: <sip:sonny@sonny.infravalley.com>
Content-Length: 0

(2) 401 Unauthorized : SIP Server -> UAC

UAC가 전송한
REGISTER 요청 메시지를 수신한 SIP Server는 해당 Authorization 헤더값을 체크한다. 만약
Authorization 헤더값이 설정되어 있지 않아 인증 정보가 없을 경우, SIP Server는 UAC에게 nonce
헤더값을 설정하여 challenge한다.

이때 SIP 메시지 상의 WWW-Authenticate 헤더값에 생성된 nonce 항목과 algorithm 항목에 암호화 알고리즘 방식등을 설정하여 UAC가 SIP Server로의 인증시 참조할 정보들을 기술한다. 이때 전송되는 메시지 예는 다음과 같다.

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP sonny.infravalley.com:5061;branch=z9hG4bKnashds7
 ;received=203.249.9.114
From: Monky <sip:sonny@infravalley.com>;tag=a73kszlfl
To: Monky <sip:sonny@infravalley.com>;tag=1410948204
Call-ID:
1j9FpLxk3uxtm8tn@sonny.infravalley.com
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm=”infravalley.com”,
 nonce=”ea9c8e88df84f1cec4341ae6cbe5a359″,
 opaque=””, stale=FALSE, algorithm=MD5

Content-Length: 0

(3) REGISTER : UAC -> SIP Server

UAC는 SIP Server가 전송한 nonce 값의 체크섬(checksum)을 계산하여 해당 값을 참조하여 SIP 메시지의 Authorization 헤더값을 설정한 후, 다시 서버로 전송하여 인증절차를 밟는다(credentials). 이때 전송되는 메시지 예는 다음과 같다.

REGISTER sip:sip.infravalley.comSIP/2.0
Via: SIP/2.0/UDP sonny.infravalley.com:5061;branch=z9hG4bKnashd92
Max-Forwards: 70
From: Monky <sip:sonny@infravalley.com>;tag=ja743ks76zlflH
To: Monky <sip:sonny@infravalley.com>
Call-ID:
1j9FpLxk3uxtm8tn@sonny.infravalley.com
CSeq: 2 REGISTER
Contact: <sip:sonny@sonny.infravalley.com>
Authorization: Digest username=”sonny”,
 realm=”infravalley.com”nonce=”ea9c8e88df84f1cec4341ae6cbe5a359″,
 opaque=””,uri=”sip:sip.infravalley.com”,
 response=”dfe56131d1958046689d83306477ecc”

Content-Length: 0

(4) 200 OK : SIP Server -> UAC

UAC로부터 인증 정보가
재첨부된 SIP REGISTER 요청 메시지를 수신한 SIP Server는 수신된 인증 정보로 인증 과정이 문제없이 통과되었을
경우, UAC에게 인증이 성공적으로 완료되었음을 알리는  200 OK 메시지를 전송한다. 이때 전송되는 메시지 예는 다음과
같다.

SIP/2.0 200 OK
Via: SIP/2.0/UDP sonny.infravalley.com:5061;branch=z9hG4bKnashd92;received=203.249.9.114
From: Monky <sip:sonny@infravalley.com>;tag=ja743ks76zlflH
To: Monky <sip:sonny@infravalley.com>;tag=37GkEhwl6
Call-ID:
1j9FpLxk3uxtm8tn@sonny.infravalley.com
CSeq: 2 REGISTER
Contact: <sip:sonny@sonny.infravalley.com>;expires=3600
Content-Length: 0

폰 라포네라 공유기 해킹 펌웨어 설치 결과

작년에 무료로 배포할 때 받은 라포네라 공유기에 DD-WRT 해킹 펌웨어를 올려봤습니다.
사용자 삽입 이미지
SSH도 열었습니다.
결국 간단한 리눅스 머신이 하나 생겼네요..

기본 펌웨어에 비해서 무수히 많은 기능이 있네요..
여러 공유기에 있는 왠만한 기능은 모두 모아둔 것 같습니다.

사용자 삽입 이미지

설치는 다음 사이트에 있는 설명을 그대로 따라 했습니다.
http://uselesshacks.com/?p=23

해킹시 필요한 모든 파일은 아래 링크에서 받을 수 있습니다.
1348784420.zip

SSH 터널링을 통한 FTP 사용

요즘같이 스니핑툴을 흔하게 구할 수 있는 상황에서는 모든 명령(접속 아이디, 암호 등)이 평문으로 전송되는 FTP는 사용하기가 많이 꺼려지죠..

안타깝게도 DS-106e는 기본으로 SFTP를 지원하지 않습니다.

다음은 SFTP를 이용하지 않고, SSH의 터널링을 이용한 FTP 접속 방법에 대해서 설명합니다.

이 방법은 또한 FTP 접속을 차단해둔 네트워크 환경에서도 FTP 서버로 연결할 수 있습니다.

[#M_[ 전체 내용 보기.. ]|[ 내용 숨기기.. ]|

전 터널링이라는 기술을 자주 사용하고 있습니다.

예를 들면, 회사 업무상 원격지에 있는 서버에 접속해야하는 경우가 종종 발생합니다.

문제는 이 서버가 있는 곳에서 외부에서의 접근을 모두 차단해 두었습니다.

서버의 프로그램에서 문제가 발생하거나 하면 직접 방문해서 처리해야 됩니다. 당연히 네트워크 관리부서에서는 특정 포트를 열어줄리가 없죠.. 왔다갔다 하는데 시간도 많이 걸리고 귀찮죠..

그래서 서버에 reverse connection 기능을 가진 텔넷 프로그램을 만들어 구동시켜 두었습니다. 이 프로그램이
외부로 주기적으로 접속을 시도해 외부의 서버 프로그램과 연결이 되면 그때부터는 마음대로 해당 서버에 접속을 할 수 있습니다.

그 후 터널링 프로그램을 구동해서 DB나 웹 등으로 접근을 하구요..

물론 저처럼 reverse connection 기능을 가진 텔넷 프로그램을 사용하지 않고도, VNC 서버의 reverse
connection 기능을 이용하거나 reverse connection 기능을 가진 다른 프로그램을 이용해도 됩니다.

본론으로 들어가서 FTP 접속에 관해서 설명드리겠습니다.(뭐 이곳에 계시는 분들이 고수분들이 많아서 대부분 알고 계실 듯합니다만…)

먼저 FTP 서버를 설정합니다.

FTP 서버의 포트와 패시브 모드 시 사용할 포트를 지정합니다. 반드시 FTP 서버에서 패시브 모드를 지원해야됩니다.

FTP 설정 화면
http://isulnara.com


FTP 서버 데몬을 재시작한 후

PuTTY를 준비하고, 다음과 같이 설정합니다.

Connection – SSH – Tunnels에서

Source port에 임의의 포트(2121)를 입력 <- FTP 클라이언트에서 사용할 포트

Destinationlocalhost:21을 입력 <- FTP 서버가 21번 포트를 사용하고 있을 경우

Add 버튼을 클릭하여 등록

위에서 설정한 것과 동일한 방법으로 패시브모드 시 사용할 포트도 등록합니다.

이 설명에서는 55536~55540를 추가하였습니다.

터널링 포트
http://isulnara.com

암호를 입력하지 않고 SSH로 로그인하기 위해서는 아래 그림에서와 같이 Private key를 지정합니다.  (이 과정은 생략해도 됩니다.)

개인키
http://isulnara.com

다음으로 아래 그림과 같이 세션을 설정합니다. 설정 후 반드시 저장합니다.

세션 설정
http://isulnara.com


Open 버튼을 클릭하고, SSH로 로그인한 다음 FTP 클라이언트의 설정을

서버의 주소는 localhost, 포트는 PuTTY에 설정한 포트 2121을 입력하고, 패시브 모드로 설정합니다.


FTP 클라이언트 설정 화면
http://isulnara.com


위 그림과 같이 설정 후 연결하면 끝입니다.


FTP 접속 완료 화면
http://isulnara.com

참고로 연결되는 과정을 보면 다음 그림과 같습니다.

일반 FTP 클라이언트에서 2121번 포트로 아이디를 평문으로 전송을 하고



FTP 클라이언트 로그인 패킷
http://isulnara.com


PuTTY에서 다시 아이디를 평문으로 localhost의 임의의 포트로 전달하고

PuTTY FTP 로그인 패킷(평문)
http://isulnara.com


PuTTY에서 실제 FTP 서버로 아이디를 암호화하여 전송하는 것을 볼 수 있습니다.

PuTTY FTP 로그인 패킷(암호화)
http://isulnara.com


암호도 위와 동일하게 전송이됩니다.

위에서 설명드린 방법으로 FTP, HTTP, DB 등 특정 포트를 SSH 터널링을 이용하여 연결할 수 있습니다.

각 이미지는 클릭하면 크게 볼 수 있습니다.

이글은 제가 활동하고 있는 네이버 넷하드 카페에 제가 작성한 글을 그대로 복사한 것입니다.

_M#]

nmap을 이용한 포트스캔

다음 글은 제가 작성한 글이 아닙니다.
어느 곳에서 퍼온 글입니다.

정확한 출처를 알지 못하여 이곳에 기록하지 못했습니다.

공격자의 입장에서 시스템에 침입하기 위해 제일 먼저 하는 행위는 바로 해당 네트워크 및 시스템에 대한 스캔이다. 광범위한 스캔을 통해서 현재 어떠한 서버가 네트워크에 연결되어 있는지 또한 각각의 서버에서는 어떠한 서비스가 제공중이며 이러한 서비스를 통해서 해당 시스템이 웹 서버인지, db서버인지 혹은 메일 서버인지등 어떠한 목적으로 운영되는지도 추측할 수 있게 된다. 반대로 서버 관리자의 입장에서는 자가 스캔을 통하여 자신이 운영하는 서버가 자신이 알지 못하는 사이 다른 포트가 열려 있는지 등을 확인할 수 있다. 이러한 스캔 기능을 제공하는 툴은 많은 프로그램들이 공개되어 있는지 이러한 프로그램중 nmap이라는 프로그램이 가장 많은 기능을 제공하면서 또한 많이 사용되는 프로그램이다.

nmap의 특징

1. nmap은 GPL 라이센스에 의해 무료로 다운로드 받아 사용할 수 있다.
2. nmap은 사용방법이 직관적이고 매우 쉽다.
3. nmap은 하나의 호스트에 대한 포트 스캔뿐만이 아니라 네트워크 주소값을 입력하였을 때는 전체 네트워크에 대하여 스캔할 수 있다. 이를테면 대상 네트워크가 192.168.1.0/24 라고 한다면 192.168.1. 대역의 C Class 전체를 검색하게 된다.
4. 각종 포트 스캐닝 알고리즘을 이용하여 거대한 네트워크를 고속으로 스캔 할 수 있다.

nmap의 기능

1. TCP 연결 검사 – 탐색할 각 포트들에 대한 세 가지 TCP handshake(SYN, ACK-SYN, ACK) 모두를 호출하는 운영체제 자체의 connect() 시스템을 사용한다. 연결에 실패할 경우(즉 서버가 SYN 패킷에 대한 응답으로 ACK-RST를 보내 왔을 경우) 포트가 닫혀있다는 것을 뜻한다. 이 방법은 루트 권한을 요구하지 않으며 또한 가장 빠른 검사 방법중 하나이다.
2. TCP SYN 검사 – 만약 검사 대상 호스트에서 ACK-SYN 패킷이 돌아온다면 nmap은 즉시 ACK와 함께 완벽한 형태의 handshake를 시도하지 않고 RST패킷을 보낸다. 이런 형태의 ‘Half-open’연결은 더 작은 로그 파일을 만든다. 그러므로 SYN 검사는 TCP 연결 검사보다 효율이 떨어진다. 이 방법의 검사는 nmap보다는 커널이 관여하는 부분이 많으므로 nmap을 루트 권한으로 실행시켜야 사용할 수 있다.
3. TCP FIN 검사 – 이 검사는 nmap이 하나의 FIN(final) 패킷을 보낸다. 만약 대상 호스트의 TCP/IP 스택이 RFC-793 기준을 따른다면 열려있는 포트는 패킷을 받아들일 것이고 닫힌 포트는 RST를 보내올 것이다.
4. TCP NULL 검사 – FIN 검사 방식과 비슷하지만 FIN 대신 TCP 플래그가 없는 패킷(null packet)을 보낸다. 이 방식 역시 위에서 언급한 RFC-793 명시 기준을 따른다.
5. TCP Xmas Tree 검사 – 역시 FIN 검사와 비슷하나 FIN 패킷을 보내는 대신 PSH와 URG 플래그(final, push 데이터 그리고 urgent)를 가진 패킷을 보낸다. 이 방식 역시 위에서 언급한 RFC-793 명시 기준을 따른다.
6. UDP 검사 – UDP는 비연결형 프로토콜이다. UDP는 TCP 검사처럼 handshake 방식으로 연결하지 않는다. 그러나 대부분의 운영체제는 UDP 포트가 닫혀있을 때 TCP/IP 스택이 ICMP ‘Port Unreachable’ 패킷을 되돌려주도록 되어있다. 그러므로 ICMP 패킷이 되돌아오지 않는다면 UDP 포트가 열려있다고 생각하면 된다. 그러나 탐색 패킷뿐만 아니라 ICMP 패킷 역시 반드시 도달한다는 보장이 없기 때문에 nmap은 일반적으로 패킷 전송의 실패를 줄이기 위해 스캔하고자 하는 각 포트에 대해 여러 개의 UDP 패킷을 보낸다. nmap의 UDP 검사의 정확도는 대상 호스트의 운영체제에 따라 매우 변화가 많다.
7. RPC 검사 – 이 방식은 다른 형태의 스캔 방식과 결합해서 사용된다. namp은 RPC(remote procedure call) 서비스 호스팅을 통해 포트가 열려있는지 확인한다.
8. 핑 테스트(Sweep)

다운로드 및 설치

http://www.insecure.org/nmap/ 에서 최신버전을 다운받는다.

-소스 설치 시 방법

#./configure
#make
#make install

nmap 실행파일은 /usr/local/bin/nmap 형태로 설치되는데 nmap을 실행하여 설치한 버전으로 정상적으로 실행되는지 확인한다. 아울러 /usr/local/share/nmap/ 디렉토리에 있는 nmap-os-fingerprints 파일은 스캐닝하고자 하는 시스템의 운영체제와 버전 정보를 인식할 수 있게 된다. 또한 nmap-services 파일에는 /etc/services 파일과 함께 각종 tcp/udp 포트에 대한 서비스 이름이 정의되어 있다.

nmap 사용방법

nmap의 기본 사용형식은 아래와 같다.

nmap [스캔타입] [옵션] <대상 목적지 호스트나 네트워크>

스캔타입

-s : TCP SYN 스텔스 포트 스캔 방식으로서 완전한 tcp 세션을 만들지 않기 때문에 half-open 스캔이라고 하기도 한다. 스캔하고자 하는 목적지로 SYN 패킷을 발송한 후 목적지로부터 SYN|ACK 패킷을 받으면 포트가 리슨한다고 판단하고 RST 패킷을 받으면 리슨하지 않는다고 판단한다. 만약 SYN|ACK 패킷을 받으면 RST 패킷을 보냄으로써 스캔이 로그에 남지 않도록 한다.

-sT : TCP connect() 포트스캔으로 connect() 함수를 이용하여 connect()가 성공하면 해당 포트는 리슨 상태이고 실패하면 포트는 리슨하지 않는 것으로 판단한다. 이 방법은 가장 기본적인 tcp 스캔 형태로서, root 뿐만이 아니라 일반유저들도 사용할 수 있으며 스캔시 로그가 남게 된다.

-sU : UDP 포트 스캔방식으로서 이는 어떠한 udp 포트가 열려있는지 스캔하고자 할 때 사용된다. 이 방법은 각각의 포트에 0 byte의 udp 패킷을 보낸 후 만약 ICMP port unreachable 메시지를 수신하면 해당 포트는 닫혀 있는 것이고 그렇지 않으면 포트는 열려 있는 것이라고 판단하는 것이다. 하지만 대부분의 유닉스 호스트들은 ICMP 에러의 비율을 제한하고 있기 때문에 스캐닝 결과가 매우 느리게 된다. 이를테면 리눅스의 경우 destination unreachable message의 경우 4초당 80회로 제한하고 있다.

-sP : ping 스캔방식으로서 해당 네트워크에서 어떠한 호스트가 살아 있는지를 알고 싶을 때 사용한다. 이 옵션을 사용할 경우 nmap은 지정한 네트워크의 모든 IP 주소로 ICMP echo request packet을 발송한 후 응답이 오면 해당 네트워크에 연결되어 있다고 판단한다. 그러나 일부 사이트의 경우 안전을 위해 icmp echo request 패킷을 차단하는 경우도 있다. 이러한 경우에는 80번과 같은 특정한 포트번호로 TCP ack 패킷을 보내어 만약 RST 패킷을 받았다면 해당 시스템은 살아있다고 판단한다.

-sF, -sX, -sN : 스텔스 FIN, Xmas, Null 스캔 방식으로 SYN 패킷을 차단한 방화벽을 통과하거나 스캐닝을 탐지하는 프로그램들이 인식하지 못하도록 할 수 있다. 만약 FIN 패킷을 발송하여 RST 패킷이 응답하면 해당 포트는 닫혀 있는 것이고 그렇지 않고 아무런 응답이 없으면 이 포트는 열린 것으로 판단한다.

스캔옵션

-O : TCP/IP fingerprinting을 이용하여 원격지의 운영체제를 판별한다.
-p <포트범위> : 스캔할 포트를 지정한다.

포트 범위 예) ‘1-1024,1080,6666,31337’
위와 같은 경우 1번부터 1024까지의 포트와 1080,6666,31337 포트를 스캔한다.

-F : /usr/local/share/nmap/nmap-services 파일에 정의되어 있는 포트만 스캔한다.
-v : 상세한 정보를 보여준다.
-P0 : ICMP echo requests를 차단한 방화벽등을 스캔할 때 사용한다.
-n/-R : DNS 질의를 하지 않는다.
-S <IP 주소>/-e <장치 이름> : 스캔시 사용할 소스주소나 네트워크 인터페이스 이름을 지정한다.

스캐닝 결과의 의미

nmap으로 스캔을 하면 해당 호스트의 포트에 대한 서비스 이름과 포트번호, 상태(state) 그리고 프로토콜등을 알려준다. state는 ‘open’이나 ‘filtered’ 또는 ‘unfiltered’로 정의되는데 Open은 해당 호스트의 포트로 accept() 접속할 수 있는 것. 다시 말해 포트가 열려 있음을 의미한다. 또한 Filtered는 호스트 앞단의 방화벽이나 라우터등에서 해당 포트를 필터링하였거나 포트가 열려있는지에 대해 알 수 없다는 것을 뜻한다.

실제 포트 스캔 예

앞에서 살펴본 옵션을 가지고 직접 포트 스캔에 응용해보자.

#nmap -v 192.168.0.1

이 옵션은 192.168.0.1에 대해 tcp 포트 스캔을 하도록 한다. -v옵션을 설저하면 좀더 상세한 정보를 확인할 수 있다.

#nmap -sS -O 192.168.0.1/24

192.168.0.1/24 네트워크, 즉 192.168.0.1부터 192.168.0.254까지 255개의 IP에 대해 SYN 스캔을 한다. 또한 -O옵션을 설정하여 호스트가 어떠한 운영체제로 작동하는지에 대해서도 질의하였다.

#nmap -sX -p 22,53,110,143,4564 192.168.*.1-127

192.168.0.0/16 B 클래스 대역의 모든 IP 주소중 끌자리가 1부터 127까지의 모든 IP주소에 대해 sshd, DNS, pop3d, imapd 그리고 4564번 포트에 대한 X-mas 스캔을 수행한다는 의미이다.