PHP 보안관련 고수분을 찾습니다. 사례도 하겠습니다.
개인개발자로 짬짬히 배워가며 인형뽑기의달인 이라는 겜을 만들었습니다.
운좋게도 2번째로 만든게 10만다운을 넘겼습니다. 아직 광고수입은 미미하지만 희망이 보이네요.
그런데 문제가 점수판을 만들었는데 엄청난 해킹공세에 시달리고 있습니다.
이래서들 점수판을 안다는 모양이군요. 매일 자주 백업해서 다른 점수엔 큰 문제는 없지만 저는 심각합니다.
게임이 1만을 넘어가면서부터 지금까지 한국인으로 추정되는 1명의 해커가 끊임없이 공격하고 있습니다.
주로 새벽2시에 발생하고 동시에 같은시간대에 핸폰정보없는 한국어 악평리뷰가 3개씩 연달아 달립니다.
한번은 새벽2시까지 지키고있다가 해킹당하자마자 30초도 안돼 지웠는데 핸폰 정보없는 악평리뷰가 같은시간데에 곳바로 올라오는걸 보고 한국인인걸 짐작 할 수 있었습니다. 새벽시간대는 리쿼스트가 거의 0에 가까운데 사용자가 그렇게 빨리 리뷰를 달리는 없거든요.
해커도 같은 개발자 일테고 내가 개인개발자인걸 알텐데 왜그러는지 도무지가 이해할수 없더군요. 이건 한두번의
장난이 아니라 아주 노골적으로 이럽니다. 거의 보름가까이요.
그동안 PHP보안 공부하며 어떻게든 막아보려고 했는데 제 실력으론 역부족입니다.
혹시 보안 전문가께서 이 글을 보신다면 절 좀 도와주셨으면 합니다. 부탁드립니다.
연락처
사무실 : 070-4383-5178
이메일 : nolpandesignlab@gmail.com
무엇때문에 해킹이라고 생각하시는거죠?
악평 리뷰? 아니면 말도 안되는 점수가 올라오나요?
그리고 말씀하시는 리뷰가 구글 플레이 리뷰를 말하나요? 아니면 직접 만드신 점수판에 리뷰 기능을 넣으셨나요?
겜이 정해진 최고점이 있습니다. 그런데 계속 그 최고점을 넘어서 매일 올라온다면 당연 해킹이죠.
같은시간 리뷰도 같이 올라옵니다. 아시겠지만 구글 이멜만 만들면 아무나 리뷰 여러개를 달 수 있습니다.
특히 핸폰정보없는 리뷰가요. 그것도새벽시간대 해킹된 타임밍에 몰려서요. 리뷰까진 물증이없다해도 점수판은 해킹이 확실합니다. 여기서 밝힌순 없지만 또한가지 아는 방법이 있고요.
해커도 분명 개발자 일텐데 도데체 왜 무엇때문에 이러는지 모르겠습니다. 첨엔 장난인줄 알았는데 도가 넘더군요. 도데체 저하고 무슨 원한이 있다고 이러는지 참.. 사이버수사대에 의뢰해야 하는건지...

달인 가지고 뭐라고 안 하던가요?
예전에 개발한 모바일 게임 이름에 달인 넣을라고 했더니
달인 시리즈가 자기들 그거라고 쓰지 못하게 하는 업체 있었는데
아 벌써 6~7년 된 이야기네요.
랭킹이야 함호화해서 하면 될 것 같고
구글 마켓 리뷰는 어쩔 수 없으니 둬야 할 것 같네요.
마켓 리뷰를 누구 혼자 썼다고 생각하는 것은 좀 많이 잘못된 생각 같네요~
안드로이드쪽 웹 접속 client 의 agent 를 제외한 agent 는 블락 시키시는게 현재 제일 쉽게
할 수 있는 것 같아욥..
그리고 웹 쪽에서 해당 점수(비 정상)를 판단해서 블락 시키시면 될텐뎅...
아!! 드디어 원인을 찼았습니다.
위에 몇분들이 지적해 주신대로 원인은 gamechi 같은 어플이네요.
확인해 보니 아무리 암호화를 해도 어플을 통해 너무나 쉽게 맘대로 아무나 점수조정이 가능한 어플이 있더군요., 헐,,,
에게 말이 되는게
자꾸 개발자 플렛폼에 해킹전에는 변수에러가 리포팅 됐었거든요. 도무지 이해가 안갔었는데 이게 설명이 돼네요.
변수를 조작해서 암호화전송 전에 점수를 맘데로 바꿀 수 있더군요. 이걸 왜 지금 알았는지.. 참 저도 한심하네요.
해싱을 썰트쳐서 수차례를하고 별 짓거리를 다 했는데도 다음날 너무 또 쉽게 뚫려 어마어마한 해커라고 생각했는데 알고보니 완전 조무라기 짓이네요. 그럼 그렇지 그만한 엄청난 실력자가 이런 짓을 할 리가 없죠.
그렇게 오랬동안 방해를 했는데 또 서버를 뚫었으면 왜 다른건 고스란히 남겨뒀는지 이해가 안갔는데 이제 좀 이해가 갑니다.
여기 검색해 보니 이걸 막는 방법이있네요. 근데... 아이구 복잡해라. 전 유니티유저라 자바를 기본으로 쓰는데 C로 설명되어 있어 이해하는데 쫌 걸리겠네요... 하여간 여기계신 고수분들 최곱니다. 감사합니다.
아! 시간을 계산하는 방법도 좋겠네요.
일단 어플 업데이트전까지는 제 방식대로 (여기서 알릴수는 없고요) 서버에서 이상한 점수는 거르고 얼른 업데이트 준비중 입니다.
님께서 말씀하신 시간계산은 다 좋은데 한가지 걸리는게 과도한 트래픽이 발생할 우려가 있네요.
서버를 싼걸 쓰다보니 일일 트래픽양이 간당간당 하거든요. 무한대가 있긴 하지만 아직 광고수입이 그정도는 아니라..
이번 게임을 개발하면서 절실히 느낀건 진짜 꼭 필요한게 아니라면 절대 웹점수판을 만들지 말자입니다.
경쟁을 부추겨 사용자를 끌어들이는 효과는 분명 있지만 그만큼 지출도 많아지고 관리에 신경도 써야하니 결국 똑같아 지는 것 같네요.
언젠가는 저도 해당될 것 같아서 의견을 남기자면 루팅이 되었는지 안되었는지 확인해야 할 것 같습니다.
그리고 검색해 보시면 패키지명을 검색해서 실행중이면 끄고 쓰라고 하는 방법도 올라와 있습니다.
제 어플 역시 점수가 php로 구성되어 있는데 총 다운로드수 30만건이 넘습니다.
그런데 아직 해킹이 한번도 안일어 났는데 php 서버 등록시에 암호화했고 무엇보다도 점수가 어플내에서 변수 형식으로 등록되는게 아니라 복잡한 계산을 통해 뽑아내야만 알수 있습니다. 아마도 이것땜에 어플 자체 해킹에 대한 대비책이 되지 않을까 싶네여.
다음 어플에도 이런 방법으로 해킹 방지를 적용할 예정이구요.
저도 웹서버로 랭킹시스템 구축해두고 운영하고 있습니다.
클라이언트에서는 변조를 막을 방법이 궁극적으로는 없습니다.
어떤 암호화를 쓰던, 파헤치면 뚫리기 마련이죠.
우회하여 은닉시키는 방법이 있긴 하지만,
가장 용이한 방법은 서버단에서 처리하는 것 같습니다.
앞서 말씀들 해주신 바와 같이 비정상적인 값들을 0또는 히든 값으로 블락시키는 방법이 일반적입니다.
저의 경우..
런칭 초기에 1점 (점수가 낮을수록 잘하는 것) 을 랭크한 유저를 블락시켰는데,
알고보니, 현재 1점을 달성한 유저(달인)도 상당하며, 정당한 점수였던 것 같습니다. (현재의 확률 분포상. 가능한 점수)
점수의 정당성 판별은 개발자 본인이 잘 아실테구요.
만약,
랭크되는 값의 유효성을 정확히 판별/유지 하려면,
클라이언트(어플 내부)에서 값 변동시 일일히 체크해주시는 방법을 쓰셔야 합니다.
여러모로 시간/공간 복잡성이 늘어나긴 하지만, 무거운 암호화보다는 간편한 방법이겠죠.
은닉화 클래스를 따로 만들어 볼까도 생각했는데,
아직 변수를 많이 쓰는 어플을 만들어보지 않아서 만들지는 않았습니다.
헉.....저도 php로 작업중인게 있는데 조심해야겠네요..
POST로 던져도 동일한가요?