2009-02-03 3 views
2

바이트 코드를 검색하고 누군가가 내 바이트 코드를 메모리 또는 파일에서 조작했는지 확인하기 위해 어떻게 해시를 만들 수 있습니까?해킹을 막기 위해 메모리에서 바이트 코드 검색

편집 : 바이너리에 서명하면 수정 및 실행되지 않도록 보호 할 수 있습니까? 사용자가 내 소프트웨어를 실행하고 있는지 확인하지 못하도록하고 싶습니다. 또한 해킹 된 클라이언트가 프로그램 (서버)을 사용하지 못하도록 보호하고 싶습니다.

누군가 내 클라이언트를 변조 한 경우 서버 측에서 어떻게 감지합니까?

답변

2

당신은 자신의 클래스 로더를 만들 수 있으며, 수동으로 점검 할, 또는 할 수 있습니다 기호 코드와 자바 런타임이 당신을 위해 일을 할 수 있습니다.

15

그래서 응용 프로그램과 동일한 (또는 그 이상의) 권한 수준을 가진 일부 프로세스가 응용 프로그램을 조작하지 못하게하려고합니까?

그건 실패 할 운명의 일입니다. 보안 검사를 추가하면 공격자가 isSecure() 메서드를 간단한 return true;으로 바꾸는 것을 막을 수있는 것은 무엇입니까?

8

귀하의 요구 사항을 명확히해야한다고 생각합니다. (적어도 당신이 찾고있는 것을 이해하는 데 어려움이 있습니다.)

  • 내가 보호하기 위해 노력하고 무엇을 : 당신은 심지어 문제를 해결하기 위해 시작할 수 있습니다 befor를 보안 관련 분야에서

    , 당신은 항상 두 가지 질문에 답해야합니까?

  • 공격자는 어떤 기능을 갖추고 있습니까?

귀하의 경우 귀하는 Java 클라이언트의 클래스 파일이 수정되지 않도록 보호하려고합니다. 이 경우 응답은 (잠재적 인) 공격자가 할 수있는 것에 달려 있습니다.

공격자가 실제로 클라이언트가 실행중인 시스템에 관리자 권한을 가지고있는 경우, 본질적으로 수행 할 수있는 작업은 없습니다. 위의 saua가 지적한 것처럼, 여러분이 실행중인 시스템을 신뢰할 수 없다면, 여러분은 운명에 처하게됩니다.

공격자가 을 수정하기 전에에 도달하면 공격자가 클라이언트에 도달 한 다음 JAR 파일에 서명하면 클라이언트가 조작을 감지 할 수 있습니다.

1

병에 서명하면 코드가 수정되지 않도록 보호됩니다. 서명에는 개인 키를 기반으로 서명을 만드는 작업이 포함됩니다. 공개 키는 이러한 서명을 사용하여 jar 파일에 포함됩니다. Java는 공개 키에 대해 서명의 유효성을 검사하고 수정 된 클래스를로드하지 않습니다.

해킹 된 클라이언트는 예방하기가 조금 더 어려울 것입니다. 먼저 공격받은 사용자는 프로토콜을 리버스 엔지니어링해야합니다.자바 obfuscator를 사용하여이를 방지하기위한 조치를 취할 수는 있지만 궁극적으로 공격자는 와이어를보고 트래픽에서 프로토콜을 리버스 엔지니어링 할 수 있습니다. 클라이언트 - 서버 통신을 암호화하더라도 (이것은 실제로 당신을 위해 ... SSH 또는 HTTPS를 사용하는 프로토콜을 사용하는 것을 고려하면 쉽지 않습니다) 궁극적으로 man-in-the-middle 공격에 여전히 견딜 것입니다 .

정확히 보호하려는 대상은 무엇입니까?

5

누군가가 내 클라이언트를 변조 한 경우 서버 측에서 어떻게 감지합니까?

수 없습니다. 인터넷에서 당신이 개라면 누구도 알지 못합니다 ;-)

심각하게 : 클라이언트에 대한 가정을하는 유일한 서버 측 옵션은 네트워크를 통해 다시 전송되는 정보입니다. 프로토콜을 암호화하고 리버스 엔지니어링하기에 충분히 어렵게 만들면 침입자가 클라이언트를 해킹하기는 어렵지만 불가능하지는 않습니다.

NGSCB (이전에는 팔라듐이라고도 함)이 더 안전하도록 설계되었지만 자체 세트는 issues입니다.

0

클라이언트에서 jar의 클래스 파일에 대한 경로 이름으로 getResourceAsStream을 호출 할 수 있습니다.

질문의 한 부분 ("어떻게 바이트 코드를 검색 할 수 있습니까?")에 대한 답입니다. 다른 답변은 큰 문제를 잘 설명합니다.

관련 문제