서버 / IT 해피CGI (happyCGI) 솔루션때문에 또 밤을 샜습니다.
2020.06.01 20:20
2년전에 구인구직 솔루션과 재능마켓 솔루션을 해피CGI (happyCGI) cgimall.co.kr 에서 구입하게 되었습니다.
오래전부터 개발해서 유지보수 해 온 코드라서 그런지 php버전을 올려도 지원이 안되고 해서 5.2대로 해서 운영하고 있었습니다.
그런데 이 솔루션을 서버에 설치해서 서비스하는 동안 서버에 수없이 웹셀이 업로드 되고 그것때문에 파일업로드 등 여러가지 자잘한 버그들을 일일이 찾아서 수정하고
서버 또한 수차 재 설치 했던거 같습니다.
그러던 어제 또 서버에 웹셀이 심겼고 꼬박 밤을 새면서 보안허점을 찾게 되었습니다.
접속로그를 통해서 웹셀을 심은 경로를 알아내게 되었고 파일을 열어서 코드를 보는 순간 아, 이건 백도어?다 라는 생각밖에 안 들었습니다.
부랴부랴 다른 해피CGI 솔루션들도 찾아봤는데 역시나 똑 같은 파일들에 백도어?로 보이는 코드가 들어 있었습니다.
분명히 코드상에서 아무런 맥락이 없이 로직에서도 불필요한 eval 함수와 쓰지도 않는 초기화 하지 않은 임시 변수를 사용하고 있더군요.
참고로 해피CGI 솔루션은 구조상 get으로 넘어오던 post로 넘어오던 전부 글로벌 변수로 사용하고 있습니다.
관건적인 메인라이브러들이 ioncube로 암호화 된 관계로 아예 볼수도 수정도 할수 없는 상황이구요.
eval 함수 또한 템플릿구현에 사용되고 있어서 Disable 하면 솔루션 자체가 작동을 안 하구요.
아래는 문제의 그 코드입니다. (악용될 소지를 고려하여 파일명은 밝히지 않도록 하겠습니다만, 해피CGI (happyCGI)솔루션이면 기본으로 거의 다 들어가 있습니다.)
#######################################################################################################
# 도배방지키 : (개발자명을 지웠습니다.) 2009.08.01
#######################################################################################################
$dobae_1 = rand(1,9);$dobae_2 = rand(1,9);$dobae_3 = rand(1,9);$dobae_4 = rand(1,9);
$gara1 = "<font color=#999999>".rand(0,9)."</font>";
$gara2 = "<font color=#999999>".rand(0,9)."</font>";
$gara3 = "<font color=#999999>".rand(0,9)."</font>";
$gara4 = "<font color=#999999>".rand(0,9)."</font>";
$rand1 = rand(100,9000);
$rand2 = rand(100,9000);
$rand3 = rand(100,9000);
$rand4 = rand(100,9000);
@eval('$dobae_org =' .$dobae_1.$dobae_p1.$dobae_2.$dobae_p2.$dobae_3.$dobae_p3.$dobae_4. ';');
$dobae_org = $dobae_number - $dobae_org;
#######################################################################################################
문제의 한줄 코드입니다.
@eval('$dobae_org =' .$dobae_1.$dobae_p1.$dobae_2.$dobae_p2.$dobae_3.$dobae_p3.$dobae_4. ';');
저는 이 코드가 아주 이상해 보였습니다.
도배방지키 4자리수를 랜덤으로 생성해서 $dobae_org 라는 변수에 문자열로 붙여서 대입하는 부분인데, 굳이 eval함수를 사용했고 거기에 이부분외엔 사용하지도 않은
초기화도 않은 $dobae_p1,$dobae_p2,$dobae_p3 변수를 사용하여 이 변수를 get으로 넘기면 넘어온 php코드를 아무런 제약없이 실행가능하다는 부분입니다.
여기에서 궁금한건 왜
$dobae_org = $dobae_1.$dobae_2.$dobae_3.$dobae_4;
한줄로 간단히 랜덤수자가 할당된 변수들을 문자열로 붙여서 $dobae_org로 대입하면 될 코드가 굳이 eval 함수로 구현해야 했으며 그것도 에러를 뿜을까 앞에 @까지 붙였냐는것입니다.
그리고 초기화도 안된 어디에서도 쓰지도 않는 빈값의 $dobae_p1,$dobae_p2,$dobae_p3 변수들을 굳이 4자리수 키외에 추가 해야 했는지에 대해서도 도무지 이해를 할수가 없었습니다.
$dobae_p1,$dobae_p2,$dobae_p3 이 변수들은 get으로 주소줄로 위험한 php코드들을 전송하여 eval 함수를 이용해서 php코드를 실행시키는 등 한줄 백도어 코드랑 너무나 흡사했습니다.
그리고 공개소스가 아닌 유료 솔루션이라 누구나 쉽게 소스를 볼수도 없고 파일 또한 많아서 일일이 확인하기도 쉽지 않은데 정확히 저 코드를 이용하여 해킹시도로 저희를 괴롭히는 자도 누구일지 궁금하더군요.
관련 파일들을 일일이 찾아내서 수정을 한 후, 아무래도 이건 너무하다 싶어 해피CGI (happyCGI)에 전화상담 요청을 하였습니다.
관련 코드를 확인시켜 드리며 이건 분명히 백도어인거 같다고 했더니, 그런 코드는 있으나 백도어는 아니며 실제 해킹이 가능한지 재현해 보라고 하였습니다.
저희가 무슨 해커도 아닌 상황에서 이런 재현 요구에 어이가 없었으나 시간을 들여서 해피CGI (happyCGI)의 솔류션 데모 사이트에 저희가 해킹당했던 상황을 추측하여
백도어로 추정되는 그 코드 한줄을 이용하여 파일을 그쪽 서버에 심어서 보여줬습니다.
아래는 해피CGI (happyCGI) 와의 상담 내용입니다.
저희가 어렵게 저 한줄코드를 통해서 해킹이 가능하다는걸 보여주면서부터 코드가 문제가 있음은 인정하지만 절대로 악의적으로 심은 백도어는 아니라고 하는것이였습니다.
솔루션 판매를 하는 회사 입장에서 백도어가 아니라고 하는것까진 이해를 할만하더군요.
회사이미지도 달려 있고 솔루션 판매사가 백도어를 고의적으로 심어서 팔리는 없겠다는 생각도 들었구요.
이 솔류션을 사고 거의 1년 6개월동안 수도 없이 밤새며 보안 허점을 찾아야했고 서비스를 중지하고 서버를 재 설치해야 했고 그런 와중에 발견된 버그들을 기술지원 상담게시판을 통해서 여러차례 제보도 했습니다.
이런 솔류션을 돈주고 사서 그동안 고생을 했고 오늘도 엄연한 백도어로 악용될수 있는 숨어 있는 코드 한줄 때문에 밤을 꼬박 샌 저희한테 재현요구까지 하는 대응에 화가 나 있는 상황에서 그럼 보상이라도 해달라고 했습니다.
그랬더니 내부적으로 논의하고 돌아온 답변에는 향후 솔루션을 구매할때 할인을 해준다거나 업그레이드를 해준다는 등 등 그런 보상을 제안을 하더군요.
솔직히 이제 더이상 해피CGI (happyCGI)솔루션을 쓸 엄두도 안 나고 버그와 이런 백도어?까지 발견되어 더 이상은 구매할 의향도 없고 무서워서 못 쓰겠다고 했습니다.
처음에는 아니라고 하다가 해킹이 가능하다는걸 재현까지 해줘서야 미안하다고 하고 고객이 피해를 입었음에도 안일한 대응에 짜증도 나고해서 원하는게 뭐냐고 하는 질문에 솔루션 구매한 가격만큼이라도 환불 보상해달라고 했습니다.
한참 지나서 다시 연락와서 하는 말이 내부 논의 결과 아무 보상도 못 해준다더군요.
두 솔루션 구매비용이 거의 5백만에 가까운데 결국은 돈 팔고 백도어?를 샀나 하는 자괴감과 아울러 다른 저 같은 해피CGI (happyCGI) 솔루션 사용자들도 빨리 저 코드부분을 찾아내여 신속한 패치를 하여 저처럼 이런 피해를 입지 말았으면 하는 바램에서 이 글을 씁니다.
코로나다 뭐다 여러모로 불편한데 오늘 또 서버 재 설치를 고민해야 하는 상황이네요.
댓글 [5]
-
어플 2020.06.01 23:39
-
네로 2020.06.02 05:42
감사합니다.
신고를 하려는게 목적이 아닌 저 같은 피해자를 줄이려는 목적의 글이 였습니다.
-
개구리삼촌 2020.06.02 00:13
일단 전화통화내역 등 모든 증거를 수집하시고,,강하게 나가셔야 할 듯합니다.좀 다른 이야기인데.메인보드 자체의 문제로 에러가 발생했는데.,,수입처에서는 절대 수십대의 메인보드 교체를 안해줄려고 하더군요.계속적인 문제제기를 하고..몇개월이 지나니...문제는 있지만 원래 교환해주는 것은 아니다.하지만 특별히 당신만 해주겠다라는 것이었습니다..일단 교체받았는데..문제는 그 메인보드는 저만 사용하는 것이 아니라.알고보니 많은 분들이 같은 문제로 스트레스받고 계시더군요.결국 결과오픈하고.....공론화시켜서.전량 교체받는 것으로 했습니다.혼자하시면 절대 안됩니다.관련 커뮤닡 등에 카톡 내용 등을 올려서 공론화를 해야 ..업체들이 움직입니다.그게 아니면 절대 소스수정도 ..보상도 안해줄 것입니다.
관련 커뮤니티에 글 올려서 공론화를 한번 해보세요..이런 것 문제 생기면 정말 일에 대한 지장도 있지만.정말 스트레스 받는데.나는 분명한데.저들은 아니다.문제없다라는 식으로 나오고 결국 입증해야....인정하지만..보상은 안해줄려고 하죠.이때는 일단 관련 커뮤니티에 관련 내용과 카톡 등으로 나눈 대화 등을 올려서 공론화시켜는 것이 좋을것 같습니다..이런 문제로 스트레스 받는 사람이 분명히 더 있을 것입니다.이런 사람들하고 힘을 모아야죠..
전화통화내용도......녹음해주시는 것도 잊지마세요..
-
네로 2020.06.02 05:40
조언 감사합니다.
애초부터 보상이 목적이 아니였으므로 그냥 넋두리 라고 봐주시기 바랍니다.
단지, 솔루션 자체의 여러가지 자잘한 버그와 어제 발견한 치명적인 코드에 의한 고객의 피해를 아주 가볍게 생각하는 그 안일한 대응에 어이가 없었을 뿐입니다.
제가 보안 허점을 알리고 관련 상담한지 얼마 안돼서 보안버그 패치를 한다고 공지가 떴네요.
-
DarknessAngel 2020.06.02 08:17
백도어가 아니더라도 코드상 보안에 문제가 되는 구석이 있다면 고쳐야 하는게 정상입니다
특히 유료 솔루션이라면 더욱 고객의 요청을 거절할 수 없습니다
애초에 dobae_p1~4에 대해서 입력값을 전혀 필터하지 않는다면 저기 뭘 집어넣을지 누가 압니까?
외부 변수를 받을때 초기화도 안 하고, 심지어는 입력 필터도 없는 시점에서 심각한 발코딩이라 보면 됩니다 (아무값이나 주는대로 다 받아버리고, 이전에 있던값이 뭐든간에 집어넣어서 실행하는게 정상으로 보이면 그 프로그래머는 서점 가서 기초 서적부터 다시 보는게 나을듯합니다)
저 부분이 필수인 시점에서 코딩할떄 외부에서 오는값을 필터링하는것조차 넣기 귀찮았던지, 고객의 보안이 전.혀. 관심도 없었던지 둘중의 하나라 보면 됩니다 (코드만 있고 실행 불가인 경우는 문제 안 되겠지만, 매번 실행되는 시점에서 발동율이 100%)
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 사용기/설치기 이용안내 | gooddew | - | - | - |
38 | 서버 / IT| 504 gateway time-out 오류 해결 방법 ( NGINX ) [2] | gooddew | 492 | 10 | 05-23 |
37 | 서버 / IT| 자장소 추가 오류 해결하기 (Ubuntu) [2] | gooddew | 937 | 12 | 05-09 |
36 | 서버 / IT| 시놀로지에 iVentoy 설치해 보았네요. [12] | 알리아스 | 1092 | 7 | 12-16 |
35 | 서버 / IT| XPEnology 업그레이드 하였습니다. [15] |
|
1269 | 16 | 06-24 |
34 | 서버 / IT| 헤놀로지 7.1 설치 하였습니다. [11] |
|
2162 | 13 | 06-08 |
33 | 서버 / IT| Linux Mint 5 LMDE "Elsie" 설치해보기 [8] | VᴇɴᴜꜱGɪ | 760 | 12 | 03-22 |
32 | 서버 / IT| iptime VPN VS synology VPN 비교 사용기 [4] |
|
827 | 3 | 01-15 |
31 | 서버 / IT| Zorin OS 간단 설치기 [8] | VₑₙᵤₛG | 1968 | 9 | 08-24 |
30 | 서버 / IT| PC통신을 기억 하시나요? [13] | 클리포드 | 1477 | 6 | 06-17 |
29 | 서버 / IT| 구글 드라이브 다운로드 초과했을 때 다운로드 성공! [10] | suk | 1499 | 11 | 04-15 |
28 | 서버 / IT| 네트워크 장애 처리 [3] | gooddew | 908 | 5 | 04-14 |
27 | 서버 / IT| 구글드라이브 다운로드 용량 초과 우회 방법 [6] | 도전정신 | 2977 | 17 | 10-25 |
26 | 서버 / IT| 구글드라이브 다운로드 용량 초과 우회 도구 - 한계 있슴 [20] | 입니다 | 4479 | 32 | 09-22 |
» | 서버 / IT| 해피CGI (happyCGI) 솔루션때문에 또 밤을 샜습니다. [5] | 네로 | 1550 | 5 | 06-01 |
24 | 서버 / IT| Xpenology 918+ 사용기 [16] |
|
1694 | 4 | 04-29 |
23 | 서버 / IT| MiniTool Partition Wizard 11.6 New released : Spanish &... [6] | skylly | 2506 | 6 | 12-14 |
22 | 서버 / IT| MiniTool Power Data Recovery V8.6 New Release | skylly | 1179 | 3 | 10-30 |
21 | 서버 / IT| (내용수정) iPXE 원격부팅 iSCSI 연결 윈도우 배포서버 구축 [12] | 항상감사 | 1951 | 6 | 01-19 |
20 | 서버 / IT| 무조건 받지 말자 [4] | 무저울 | 3439 | 1 | 03-29 |
19 | 서버 / IT| [공개] 타임서버 공개합니다. [22] | asklee | 3619 | 7 | 03-16 |
https://www.boho.or.kr
여기에 신고라도 해보시죠