2009-12-26 1 views
3

우리 웹 응용 프로그램에 일부 데이터를 업로드 할 기본 Windows 응용 프로그램 (MFC)을 작성하는 중입니다. Windows 응용 프로그램은 사용자가 로그인 할 수있게하고 이후에 정기적으로 일부 데이터를 웹 응용 프로그램에 업로드합니다. 업로드는 웹 응용 프로그램에 대한 간단한 HTTP POST를 통해 수행됩니다. 내가 가지고있는 관심은 어떻게 업로드가 실제로 우리의 앱에서 나온 것이지, 컬 (curl)이나 그와 같은 것이 아닌지 확인할 수 있다는 것입니다. 나는 우리가 일종의 공공/개인 키 암호화를 여기에서보고 있다고 생각한다. 그러나 우리가 어쨌든 공개 키를 우리의 윈 애플 리케이션 실행 파일에 포함시키고 그것을 수행 할 수 있는지 확신 할 수 없다. 아니면 공개 키가 앱 외부에서 쉽게 추출하여 사용할 수 있습니까?HTTP 실행이 실제 실행 파일에서 수행되었는지 확인

어쨌든 우리는 양면 (클라이언트 및 서버)을 구축하고 있으므로 거의 모든 옵션이 있지만 HTTP (S)를 통해 작동해야합니다. 그러나 우리는 win (클라이언트) 앱의 실행 환경을 제어하지 않으며, 시스템에서 게임을 실행하는 사용자 만이 시스템을 게임으로 얻는 것을 얻는 유일한 방법입니다.

+0

좋아하는 : 나는 몇 가지 생각을 가지고 있지만, 나는 정말로 암호 녀석이 아니다. 희망을 갖고 진정한 사람은 방황하고 확실한 답을 줄 것입니다. 그런데 전략을 제안하고 커뮤니티에 비판을 제기하면 더 나은 답변을 얻을 수 있습니다. –

+0

사용자를 신뢰하지 마십시오. 그들은기만적이고 악의적입니다. –

답변

9

궁극적으로, 소유하지 않은 컴퓨터에서 실행되는 응용 프로그램의 ID를이 방법으로 증명할 수 없습니다. 키를 삽입하고 해시 및 체크섬으로 재생할 수 있지만, 하루가 끝날 때 다른 사람의 컴퓨터에서 실행되는 코드에 의존하는 모든 것은 위조 될 수 있습니다. 키를 추출 할 수 있고, 코드를 리버스 엔지니어링 할 수 있습니다. 이것은 모든 보안을 모호하게합니다.

유효성 검사 및 데이터 정리 작업에 시간을 할애하고 실제로 보안을 설정하려면 최종 사용자를 클라이언트 인증서로 보호하십시오. 다른 것은 시간 낭비와 잘못된 보안 감각 일뿐입니다.

+0

나는 당신이 옳았다는 것을 이제 깨닫고, 그것은 모두 거짓된 안보 의식 일뿐입니다. 그러나 사용자가 실제 가짜/조작 된 데이터를 업로드하여 시스템을 조작하려고 시도하는 경우 클라이언트 인증서가 도움이 될까요? – nnc

+0

당신이 그것을하고있는 사람을 꽤 잘 알고있을 뿐이며 시스템을 손상시키는 경우 인증서를 취소 할 수 있습니다 (발급 한 CA와 검증 서버에서 CRL/OCSP를 올바르게 설정했다고 가정). – nitzmahone

+0

맞아요, 클라이언트를 제어하는 ​​사람은 모든 보안 조치를 우회하는 것을 포함하여 모든 것을 할 수 있습니다. 이것은 메모리 내에서 프로그램의 변수를 수정하는 형태를 취할 수 있습니다. 실제로는 VM에서 실행하고 VM 외부에서 메모리를 수정하는 것을 포함하여 (실제로는 불가능한) 방어하기가 어렵습니다 (여기서 수정을 수행하는 응용 프로그램은 검출 될 수있다). OP의 최선의 방법은 업로드가 유효한지 확인하여 가비지가 업로드 되더라도 잘못된 결과가 발생하지 않도록하는 것입니다. 어쨌든 클라이언트 측 버그로 인해 하루가 걸릴 수 있습니다. – MarkR

0

클라이언트를 제어 중이므로 응용 프로그램에 키를 포함시키고 사용자가 응용 프로그램 이미지에 대한 읽기 권한이 없는지 확인하십시오. 논리를 2 단계로 구분해야합니다 - 1은 사용자가 실행하고, 다른 하나는 HTTP (S)를 통해 서비스에 연결합니다. 사용자는 항상 자신이 실행중인 응용 프로그램에 대한 읽기 권한을 갖기 때문입니다.

제대로 이해하면 사용자가 로그온 한 후에 데이터가 자동으로 전송됩니다. 서비스 부분 만 필요하다는 소리입니다.

+1

누구든지이 것을 downvoted, 이유를 제공하십시오. 원래 포스터는 구체적으로 그가 호출 환경, 즉 클라이언트를 제어한다고 말했고, 그렇다면 내 대답은 유효합니다. –

+0

저는 DV가 아니지만 공격자가 키를 추출 할 수 있다는 것을 알고 있다고 제안했습니다. 즉, 실제로 실행 환경을 제어하지 못한다는 것을 의미합니다. 나는 그들이 클라이언트와 서버를 단순히 짓고 있다고 말할 의도가 있다고 생각한다. – EricLaw

+0

저는 원래 명확하지 않았고 우리가 클라이언트 어플리케이션의 실행 환경을 실제로 제어하지 않는다는 것을 반영하기 위해 질문을 업데이트했습니다. – nnc

2

최상의 방법은 클라이언트 인증서가있는 HTTPS를 사용하는 것입니다. 아마도 WinHTTP의 인터페이스와 함께.

하지만 우리가 어쨌든 공개 키를 우리 실행 응용 프로그램 실행 파일에 포함시키고 실행할 수 있는지 확실하지 않습니다.

클라이언트가 서버에 자신을 식별하려면 개인 키가 포함되어야합니다.

아니면 응용 프로그램 외부에서 추출하고 사용하기가 쉽지 않습니까?

클라이언트 응용 프로그램의 실행 환경을 제어하지 않으면 응용 프로그램에서 수행 할 수있는 모든 작업을 해당 환경을 제어하는 ​​공격자가 분석, 자동화 및 복제 할 수 있습니다.

필 요할 경우 통신 절차 주위에 난독 화 레이어를 넣을 수 있지만 문제를 해결할 수는 없습니다. 멀티 플레이어 게임은 부정 행위를 방지하기 위해 수년간이 작업을 해왔지만, 결국에는 결코 이길 수없는 난처한 무기 경쟁입니다. 블리자드는 당신보다 더 많은 자원을 가지고 있으며, 그것도 관리 할 수 ​​없습니다.

2

앱을 배포 한 후에는 바이너리를 제어 할 수 없습니다. 모든 서명 및 암호화 논리가 실행 파일에 있으면 추출 할 수 있습니다.영리한 코더는 동기 부여가 충분할 때 코드를 파악하고 상호 운용 가능한 시스템을 구축 할 것입니다. 이것이 DRM이 작동하지 않는 이유입니다.

예를 들어 키를 PC의 MAC 주소에 연결하는 복잡한 시스템은 실패합니다.

특정 실행 파일이나 시스템을 신뢰하지 않지만 사용자를 신뢰하십시오. 암호문으로 보호 된 개인 키 파일을 각자 맡기고 해당 키가 서비스에서 내용을 제출하는 방법을 설명하는 방법을 설명합니다.

+0

여기에 대한 답을 바탕으로, 나는 사용자가 시스템을 게임으로 얻는 유일한 사람이기 때문에이 문제에 대한 진정한 "해결책"이 없다는 것을 깨달았습니다. 그래서 암호문이있는 개인 키가 이 경우? – nnc

+0

글쎄, 사용자가 다른 사람에게 적시에 업로드하거나 다른 앱에 자신의 키를 통합하는 것이 자신의 장점 인 경우 개인적으로 서명하는 * 사람에게 아무런 해를 끼치 지 않는다면 할 수있는 일이별로 없다. –