유니티 http api 통신 보안

조회수 2012회

안녕하세요. 웹 개발자 입니다.

이번에 게임 API 서버를 개발하고 있는데, http 통신 시 보안 관련하여 질문이 있습니다.

유니티 클라이언트에서 http 통신으로 전달 되는 값을 변조 하지 못하도록 하려고 합니다.

가령,
money=100,exp=100 이란 두개의 값을 서버로 보낼 때,
hmac(100+100+secret_key) 이렇게 만들어진 값을 파라미터로 같이 보내서 검증을 하려고 합니다. (유저 검증은 로그인 후 토큰 값 검증으로 하고 있습니다.위의 예시에서는 제외했습니다.)

문제는 클라이언트 소스코드가 디컴파일? 하게 되면 동작 방식과 secret_key 가 노출 되는데
악의적으로 http 호출을 임의로 만들어서 공격자가 보내게 되면 서버에서는 값이 정상적인 호출인지 알지 못하게 됩니다.

이 경우, 클라이언트 소스코드 난독화 어셋등이 있던데 이렇게 하면 해소 될 수 있을까요?

값을 암호화 하는 방법도 소스코드 상에서 암호화 동작 방식을 알게 되니깐 난독화가 아니면
의미가 없을거 같은데...

클라이언트 난독화 정도만 하면 될지...궁금합니다.

아울러 유니티 난독화 어셋 추천해주시면 감사하겠습니다. 꾸벅.

1 답변

  • 질문과 같은 취약점이 CSRF(Cross Site Request Forgery) 입니다.

    보통 클라이언트가 입력폼을 요청할 때 서버는 Verification Tokens 를 보내고 클라이언트가 submit을 할 때 서버에서 받은 Verification Tokens 를 함게 제출해서 검증받는 방법이 일반적으로 사용됩니다.

    Verification Tokens 은 서버에서 무작위 형태로 만들어지는 문자열이므로 공격자가 알아낼 수 없어 안전한 통신이 됩니다.

    질문에도 secet key 를 사용한다고 했으니 Verification Tokens 과 같은 개념으로 보입니다. Verification Tokens 을 사용하는 것은 Cross Site Request Forgery 의 방지입니다.

    http는 무척 단순한 프로토콜입니다. money=100, exp=100 이 유효한(정상적인) 값인지 여부는 서버에서 별도로 확인해야 합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)