2013-11-20 4 views
2

안드로이드에서 System.loadLibrary와 System.load 사이의 보안 관련 문제에 대해 궁금합니다.Android에서 네이티브 라이브러리를 안전하게로드하는 방법은 무엇입니까?

static { 
    System.loadLibrary("mylib"); 
} 

호출 시스템에 의존하는 응용 프로그램에 의해로드되는 것은 아니다 된 파일을 제공하는 시스템으로 이어질 수 있습니다 (System.loadLibrary를 방법을 통해) 일을 찾을 수 있도록합니다. 침입자가 검색 대상 위치에 파일을 배치 할 수있는 경우 공격자는 임의의 코드를 응용 프로그램에 삽입하여 실행할 수 있습니다. 우리가 그런에서 NDK 라이브러리에 대한 전체 경로를 지정하는 방법 : 당신이 정확한 경로를 지정하는 경우

, 당신은

질문은 등 파일 권한 같은 것들을 통해로드 된 파일을 보호 할 수있는 능력을 가지고 이 경로는 모든 Android 버전/기기에서 유효합니다.

답변

3

System.loadLibrary 사용의 용이성을 위해 설계된 높은 수준의 방법입니다 : 내가 아는 한, 당신의 Eclipse 프로젝트의 libs 폴더에 해당하고, (안드로이드 파일 시스템)의 앱 lib 폴더를 검색합니다.

즉, System.loadLibrary을 사용하여 잘못된 라이브러리를로드하여 앱을 망쳐 놓으려면 공격자가이 lib 폴더에서 자신의 라이브러리를 무효화하거나 동일한 라이브러리를 추가 할 수 있어야합니다 어떤 식 으로든이 lib 폴더에있는 이름입니다. 가능하다면 나는 전혀 모른다. (희망하고 추측하지 마라!). 그렇다고 가정하면 이것은 lib 폴더가 안전하다고 생각할 수 없다는 것을 의미한다.

이것은 공격으로부터 앱을 보호하기 위해 라이브러리 파일을 다른 위치에두고 디스크에 라이브러리 파일을 쓰는 논리를 갖고 있다는 것을 의미합니다. 이런 경우,이 논리의 어딘가에서, 당신은 당신의 라이브러리의 절대 경로에 손을 댄다.

라이브러리 경로를 사용하면 System.load을 사용하여 라이브러리를 추가 할 수 있습니다.이 라이브러리는 라이브러리에 대한 전체 경로를 인수로로드합니다. 단,이 옵션에서

:

  • 중 하나 lib 폴더, 당신은 당신의 자신의 논리를 가지고, 그래서 당신이 그들을 저장, 거기 라이브러리를 넣을 수 없습니다 당신이 사용하여로드 할 수있는 공격 가능한 것입니다 System.load
  • 또는 lib 폴더는 실제로 안전하며 공격의 위험이 없습니다.보다 표준 인 System.loadLibrary을 사용할 수 있습니다.

희망이 있습니다.

+0

이 경로가 모든 Android 버전/장치에 유효하도록 NDK 라이브러리의 전체 경로를 지정하려면 어떻게해야합니까? –

+0

자세한 내용은 내 대답을 편집했습니다. – mbrenon

+1

정확히는 아닙니다 - 나는 System.loadLibrary()가 app의 lib 폴더 외에도 일부 시스템 디렉토리를 검색 할 것이라고 생각합니다. 그러나 이들을 공격 할 수있는 사람은 아마도 lib 폴더도 공격 할 수 있습니다. 그렇지 않으면 쓰기 가능한 시스템 디렉토리가있는 심각한 장치가 깨져서 실행됩니다. 자신의 앱의 lib 폴더보다 안전한 위치를 찾지 못할 것입니다. 특히 해당 폴더가 앱에서 쓸 수 없기 때문에 다른 곳에 넣을 수도 있습니다. –

관련 문제