2016년 4월 17일 일요일

phpadmin scanner ZmEu

75.127.68.106 [...] "GET //phpMyAdmin/ HTTP/1.1" 404 285 "-" "Made by ZmEu @ WhiteHat Team
이렇게 나오는 로그는 페이지를 운영한지 오래된 유저라면 되게 많이들 알고 있을 것이다.

ZmEu는 루마니아 해킹팀에서 제작이 된것이며 취약점테스트를 할때 기본적으로 많이들 사용되는 툴이다.

phpMyAdmin의 취약점이 노출되어 해당 취약점으로 DB에 접근이 가능해지만 상상만으로도 개발자 입장에서 머리아파질 그런 상황에 처해지게 된다. 

* phpMyAdmin은 웹서버상에서 MYSQL의 관리자로서 DB를 처리할 수 있도록 만들어진 PHP툴로  데이타베이스를 생성/삭제,       
테이블 생성/삭제, 필드 생성/삭제, SQL 문장 실행, 권한 관리 기능 실행가능하다

필자는 GET //phpMyAdmin/를 차단하고 있으며
TCPdump 상에서는 User-Agent:.ZmEu 로 나오고 있으니 한번 ZmEu를 구해서 Dump를 뜬다음에 해당 툴의 User-Agent와 그에 따른 추가 툴킷을 가동하여 방화벽상에서 문자열로 차단하는것을 권장한다 .




2016년 4월 14일 목요일

클라우드플레어 -04 (헤더)



클라우드 플레어가 다 좋은데. 조사를 해봤는데 nginx 기반인 프록시로 만들어져있다고 한다.




처음에 Unity3D를 이용한 리듬게임을 만드려고 하였는데 리퀘스트 자체를 클라우드플레어로 거쳐서 통신을 하려고 했다. 그런데 클라우드플레어를 거쳐서 하려니 되게 이런저런 어려움이 있었다.




전 글에 언급했던것 처럼 구조적인 문제가 가장 큰 원인이었다 .






리얼아이피를 받아올수가 없다. 그래서 특별한 조취를 취해주어야 하는데 일단

PHP : http://stackoverflow.com/questions/14985518/cloudflare-and-logging-visitor-ip-addresses-via-in-php

여기의 글을 참고했다.

$_SERVER["HTTP_CF_CONNECTING_IP"] real visitor ip address, this is what you want

$_SERVER["HTTP_CF_IPCOUNTRY"] country of visitor


아이피 받는 REMOTE_ADDR 이나 다른 변수값을 위의 헤더로 변경해주면 되고

------------------------------
asp : http://pcrelated.net/index.php/asp-net-find-a-connecting-users-ip-using-cloudflare를 참고해보면

string userIP = Request.Headers["CF-CONNECTING-IP"].ToString();

--------------------------------
java :

String getip = request.getHeader("HTTP_X_FORWARDED_FOR");
 if (getip == null) getip = request.getRemoteAddr();
---------------------------------------------

자바에서는 이렇게 처리를 하면 된다 ... 센스있게 넘어오는 값이 널값이면 다른 헤더로 한번 더 대조를 하면 관리하는데 큰 문제는 없을것이다... 자바 같은 경우에는 필자가 실제로 사용하는 코드를 복붙했다.

실시간 통신을 하려다가 결국에는 중간에 미들웨어를 낀 다음에 각 클라이언트마다 처리결과를 뿌려주는 비동기방식 넷플레이를 선택을 했다. 아이피는 죽어도 가리고 싶으니깐 ... ( 필자가 시큐어코딩은 약하다 )

내부 방화벽은 사용하기 어려우니 이런 경우에는 리다이렉트를 통해서 국가및 아이피에 대해서 접속을 제한하는 수동적인 방법을 사용해야한다. 필자는 이렇게 사용하고 있음...

nginx로 운영을 하거나 아파치 mod_cloudflare 설치해주면 tcpdump에서 클라우드플레어 값이 잡힌다고 하는데 이건 알아서 찾아보는게 좋을것 같다. 필자도 주워들은 것이여서 ... 실제로 경험은 하지 못했지만 리눅스로 운영을 한다면 꼭 알아봐야할것 같다. 만약에 진전이 있으면 또 추가적으로 글을 올리겠다

2016년 4월 13일 수요일

클라우드플레어 -03 (도메인 삭제 및 방화벽)

안녕하세요. 오늘은 도메인 삭제 및 운영하면서 몇가지 꿀팁을 알려주겠다.



처음에 클라우드플레어를 사용하는데 도메인을 삭제할줄 몰라 눈물을 머금고
네임서버를 옮겨서 등록을 한적이 있다. 하지만 여기서

Status 옆에 Advanced라고 있는대 그걸 누르면 UI가 드롭되면서 두가지 항목이 나오는데
Pause는 일시정지 / Delete Website는 말 그대로 웹사이트를 삭제한다.

원하는대로 도메인을 삭제를 할 수가 있다.

--------------------

클라우드플레어가 되게 좋은데
되게 큰 부작용이 있다. 그것이 무엇이냐...
일단 구조도 부터 보자




대략 구조가 이렇다.. 유저가 클라우드플레어로 접근을 하고 그 처리를 서버로 넘겨주는 방식이다. 이렇게 되면 리얼아이피 숨기는 역할을 하게되어 기본적인 보안처리가 가능하게 된다. 소스및 구조문제만 아니면 왠만한 보안이슈는 발생하기 어렵다.

문제는 모든 리퀘스트아이피를 앞단쪽에서 받아버리고 그 모든걸 서버에다가 리퀘스트를 전달해주느 일종의 프록시 역활을 하게 되어 . 타 프록시와 동일한 부작용을 가지고 있다는 것이다.

그래서 본서버에서 방화벽 작업을 해도 방화벽이 무력화되는 증상이 발생하여
관리하는데 있어 관리자 입장에서는 계륵같은 상황에 처하게 된다 .

그래서 아이피 차단 같은 경우에는 매우 불편하지만 어느정도 룰셋 조정이 가능하다.

대쉬보드 상단에 보면 Firewall이 있는데 그 항목을 클릭해보자



Security Level : 해당 기능같은 경우에는 보안등급을 매겨서 fooding 공격을 차단하는 의미인것 같았다. 필자가 fooding 공격을 당한적이 있었는데 레벨을 올리니 공격성 리퀘스트의 수가 크게 감소한 적이 있었다.(connlimit 설정과 유사한듯하다.)

불편함 없이 사용을 하기 위해서는 구조를 고려하고 레벨을 조정하는것이 좋을것 같다.

Challenge Passage : 이건 좀비인지 아닌지를 판단하고 본 페이지를 넘기는 기능인데... 주로 캡챠페이지기능과 유사하다고 생각하면 될것 같다. (실제로 그런지는 모르곘지만 경험상으론 그렇다) 그래서 접속시 클라우드플레어창이 뜨면서 몇초 대기했다가 본 페이지에 접속하게 된다. 초회 접속할때만 해당 페이지가 나오고 옆에 설정값은 에이징 타임이라고 생각하면 될것 같다.

다음으로 IP Firewall 기능인데. 여기서 차단을 해야 리얼 아이피가 차단이 된다. 본서버에서 설정해봤자 구조적인 문제로 소용이 없다. 여기서 차단해야한다. 무조건...
근데 되게 제한적인게 문제이다.

문제점 세가지(운영하면서 느끼고 있는 )
1. ALL 차단이 안된다. 차단 범위는 최대 16bit까지 가능함
2. 국가차단이 화이트처리만 된다.
3. iptables 처럼 유동적인 차단이 어렵다 오직 아이피와 국가만 차단...

이 문제만 감당할 수 있으면 충분히 이 방화벽도 유용하다.

2016년 4월 12일 화요일

클라우드플레어 -02 (도메인 등록)

저번글에서는 Cloudflare에서 도메인을 스캔까지는 하였다 이번엔 도메인 등록을 마무리해보자


필자의 DNS레코드 페이지이다. 일단 가볍게 DNS 레코드에 대해서 알아보기로 하자

DNS 타입은 

레코드설명
NS도메인의 네임서버 정보
MX도메인의 MX(Mail Exchange) 서버 
A호스트의 IP주소
CNAME별칭(Canonical Name)
SOA도메인의 Start of Authority(시작점)
HINFO호스트의 CPU 정보와 운영체제 정보
MINFO메일박스와 메일리스트 정보
PTRIP주소에 대한 호스트명
TXT호스트에 대한 텍스트 정보
UINFO사용자 정보
ANY호스트에 관련된 모든 레코드들의 정보


이렇게 있으며 필요한 타입대로 사용하면 되는데 필자는 A레코드와 MX와 CNAME 말고는 쓸일이 없더라...

그리고 서브도메인이란 도메인에 발급되는 보조도메인이다. 
쉡게 설명하면
a.com의 서브도메인을 등록을 하였다 . 도메인은
www.a.com
m.a.com
iiiii.a.com
이렇게 서브도메인 붙이고 원하는 쪽으로 레코드를 붙여주면 된다.

----------------------

레코드 작업이 완료되면 다음은 플랜을 선택을 해야하는데


주소는 https://www.cloudflare.com/plans/
여기서 각 플랜을 확인하고 원하는 플랜을 선택을 한다.
필자는 단 한번도 Ddos를 맞은적이 없어서 Free plan으로 진행하였다




도메인 구매처에서 네임서버를 확인하고 클라우드플레어가 지정해준 네임서버대로
DNS를 설정해줍니다.  자고로... 특별한일이 아니면 바꾸라는 네임서버의 주소는 바뀌지 않는다 . 아무래도 계정당 할당되는 네임서버가 있는듯....



등록이 완료되면 Status가 Pending이라고 나오는데 네임서버를 바꾸고 시간을 조금 두고 기다리면 status가 Active로 변경이 되면 정상적으로 된다 바로 이렇게...



이렇게 나오면 완료다.
자고로 도메인 네임서버를 확인하려면 리눅스에서 jwhois를 받아서 설치한다음 후이즈를 조회를 하던가 http://whois.kisa.or.kr/kor/ 에서 조회하면 될것 같다. 

클라우드플레어 -01 (개론 / 스캔)

클라우드 플레어란?
클라우드플레어는 미국에서 서비스를 하고있는 DNS 및 CDN서비스를 도메인 단위로 제공을 해주고 있는 서비스이며 2016년 기준으로 76곳의 데이터센터를 통해 전세계적으로 CDN서비스를 제공하고 각 센터에서 가지고 있는 캐시자료로 사이트가 해외에 있더라도 보다 빠르게 사이트를 접속하고 트래픽 절감에 큰 이바지를 하고 있는 서비스이다

대표적으로 사용하고 있는 사이트들이 있는데
브금저장소나 리디북스 티비플 2ch ... 심지어 롤도 클라우드플레어를 사용하고 있다.

게다가 리뷰탑텐에서 Ddos 방어부분에서도 6위를차지하고 있어 CDN 보안 Ddos방어 , 페이지 사이트를 운영하는 입장에서는 팔방미인같은 존재라고도 할 수 있다.

본격적으로 클라우드플레어 계정에 가입하는것부터 시작해서 운용방안까지
아는것의 전부 나누어 사이트 운영에 조금이나마 다른사람들에게 도움이 되었으면 한다



이게 가입하는데 필요한 양식이다 , 단지 메일 비밀번호만 있으면 가입이 된다.
다른 해외사이트도 다 그렇지만... (우리나라가 제일 회원가입이 어려운것 같다)




필자가 운영하고 있는 사이트들이다. 비밀이라 가려두었다.
가입을 하면 이렇게 대쉬보드 나오는데 도메인을 누르면 각종 레코드 및 해당
도메인에 대한 다양한 작업이 가능하다.

일단 도메인 등록부터 먼저 해보자



Add Site에서 도메인을 등록을 합니다.
(꿀팁을 드리자면  , 을 통해 여러개의 도메인을 한꺼번에 등록할 수 있음 )
Begin Scan을 누르면 다른 네임서버 및 DNS룩업툴에의한 추출된 레코드들이 나오게 된다.



(네이버를 스캔한 예시)

레코드들은 클릭을 하여 각 서브도메인 및 아이피를 수정할 수 있다.
다음에는 클라우드플레어 기능을 활성화하는 법을 알아보자