도리안의 개발 이야기 #86 - 침해 건으로 발견된 서버의 허점

in #kr-dev5 years ago


IMAGE 2019-02-04 23:45:15.jpg

대문 제작: imrahelk



지난 주말의 서버 침해 건들의 후속 조치를 진행하면서 무엇이 잘못되었는지 정리할 필요가 있습니다. 발견된 오류들은 다음과 같습니다.

충전 가능 조건의 오류

캐시로 결제할 경우, 충전 가능 여부를 결정하는 조건식은 다음과 같았습니다.

(사용자의 캐시 금액) >= (충전 금액)

틀린 조건은 아니지만, 충전 금액이 어떻게 입력되는가에 따라 이 조건이 뚫리는 문제가 있었습니다.

  • 충전 금액이 음수인 경우
  • 사용할 캐시 금액이 0인 경우

충전 금액은 양수여야 합니다. 이것이 음수이면, 시작조차 해서는 안 됩니다. 앱에서는 그렇게 하지 않죠. 문제는 API를 간파한 해커가 임의로 충전 금액을 조작하는 경우가 있었다는 것입니다. 음수 체크만 했더라도 침해는 막을 수 있었을 것입니다.

캐시 결제시 사용할 캐시 금액이 0인 경우도 문제였습니다. 이것도 0이고 사용자의 보유 캐시도 0이면, (사용자의 캐시 금액) >= (충전 금액)이므로 충전 가능 조건이 성립되어 뚫려버렸습니다. 사용 캐시 금액이 0인 경우도 충전할 수 없는 조건인데 그걸 체크하지 않았던 것이 문제였습니다.

해결

이 문제는 다음과 같이 충전 조건에 제약 사항을 추가하여 해결하였습니다.

  • 충전 금액이 0이거나 음수이면, 충전 실패 처리한다.
  • 캐시 결제시 사용할 캐시 금액은 충전 금액과 동일해야 한다.

그러나 혹시 또 다른 허점은 없는지 찾아봐야 합니다. 이번 이슈를 계기로 보안에 안전한 코드를 만드는 방법을 배우는 기회로 삼아야 하겠습니다.

aaronhong_banner.jpg

천하제일연재대회 지난 글

36회 - 천하제일연재대회 시작! 그리고 예정 주제
38회 - 이직을 원하는 이유
39회 - 이직을 주저하는 이유
40회 - 일과 중에 학습 시간을 갖기로
41회 - 서비스 개발에 대한 회의감
42회 - 면접 후 생각
43회 - 천하제일연재대회 보팅 순서 관찰기
44회 - 포트폴리오 DB 계획 그리고 아쉬운 ERD 도구
45회 - 최근의 개발 업무의 실수 그리고 개선점
46회 - 개발 내용 기록에 대한 고민
47회 - 히스토리를 어떻게 남길까
48회 - 아쉬운 면접 결과
49회 - 개인 개발 주제 구상
50회 - 코드 복기 필요
51회 - 업무 분장 변경
52회 - 스프링 기반 restful API 개발 방법 정리 계획
53회 - 엇나간 개발 일정
54회 - 업무 분장 변경 하나? 안 하나?
55회 - 이력서 새로 작성
56회 - 헤드헌터와 통화
57회 - 대기업이냐 중소기업이냐
58회 - 서비스 안정화 필요
59회 - 자바의 예외 관련 자료
60회 - ERD 그리는 중
61회 - 검색 내용 정리
62회 - 이루지 못한 뉴욕의 꿈
63회 - 반복되는 카드 도용 이슈
64회 - 이직 보류
65회 - 최근 일이 어려워진 이유
66회 - 열정이 식었는가? 어떻게 해야 하나? (솔루션 아님)
67회 - 이번 주말에 해야 할 것
68회 - 간만에 깃허브 업데이트
69회 - 이스팀 모바일 오픈소스. 자바 개발을 기대했지만... ㅠㅠ
70회 - 안경 교체
71회 - 어제 DB 공부
72회 - 휴가를 보내고...
73회 - 희한한 busy 중복 게시
74회 - 야근. 회사에서? 집에서?
75회 - 심장 쫄깃했던 금요일 저녁
76회 - 이번 주말도 무사히... ^^
77회 - 주말에 DB 공부
78회 - 피곤해서 어려운 야간 공부
79회 - 현재 경력의 약점
80회 - 서버 개발자에게 업무 넘기기
81회 - 최근 고객사의 요구사항을 보며...
82회 - DB 개발의 어려움
83회 - 피로와의 싸움
84회 - 주말에 발생한 충전 침해 건들
85회 - 또 다시 허무하게 날려 버린 주말

Sort:  

저는 코박봇 입니다.
업보트 합니다 :) 좋은 밤 되세요.

감사합니다.

행복한 ♥ 오늘 보내셔용~^^

Posted using Partiko Android

감사합니다.

Congratulations @dorian-dev! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 250 as payout for your posts. Your next target is to reach a total payout of 500

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

3 years on Steem - The distribution of commemorative badges has begun!
Happy Birthday! The Steem blockchain is running for 3 years.

You can upvote this notification to help all Steem users. Learn how here!

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 61940.19
ETH 2433.78
USDT 1.00
SBD 2.50