보안 코딩 기술: Zip 라이브러리의 기본 동작으로 원격 코드 실행으로 이어질 수 있습니다.

게시일: 2017년 11월 13일
피터 드 크레머
사례 연구

보안 코딩 기술: Zip 라이브러리의 기본 동작으로 원격 코드 실행으로 이어질 수 있습니다.

게시일: 2017년 11월 13일
피터 드 크레머
리소스 보기
리소스 보기

이번 주에 우리는 Zip 라이브러리의 기본 동작에 대해 이야기 할 것입니다. 응용 프로그램 개발자인 경우 이전에 이 것을 사용한 가능성이 매우 높습니다. 인터넷을 통해 다운로드되는 대부분의 리소스는 zip 형식으로 되어 있습니다. 압축 된 데이터는 작기 때문에 더 빨리 다운로드되고 대역폭을 적게 소비합니다.

좀 더 구체적인 예를 원한다면: 게임 텍스처, 키보드에서 자동 완성을 위한 언어 팩, ... 많은 리소스가 응용 프로그램과 함께 자동으로 번들로 제공되는 것이 아니라 나중에 다운로드됩니다.

그러나 이 기능을 사용할 때는 zip 아카이브의 파일 이름에 경로 통과 정보가 포함될 수 있습니다. 추출하면 의도한 디렉터리 외부에서 파일이 생성됩니다. 이것은 종종 기존 파일을 덮어 쓰려는 의도로 수행됩니다.

Zip 아카이브

다음 두 파일이 포함된 zip 아카이브가 있다고 가정해 보겠습니다.

파일1
.. /file2

이 아카이브를 추출하면 zip 디렉토리에서 file1이 예상되는 곳에서 추출됩니다. 그러나 file2는 지퍼 라이브러리에 아카이브를 추출하도록 요청한 곳보다 높은 하나의 디렉터리로 작성되었습니다.

따라서 zip 라이브러리가 이 경우를 제대로 처리하지 않으면 공격자가 시스템에 임의파일을 작성할 수 있습니다. 라이브러리가 안전한지 항상 확인하면 이 엄지 손가락 규칙은 라이브러리에 유효하지만 특히 이러한 유형의 파일에 대해 zip 라이브러리의 기본 동작을 확인하는 것을 알고 있습니다.

이 사례가 Android에서 제대로 처리되지 않을 때 결과를 입증할 수 있습니다. Android에서는 Java Zip 라이브러리(java.util.zip)가 사용되며, 라이브러리는 기본적으로 위에서 설명한 대로 경로를 통과할 수 있도록 합니다.

Androids Dalvik 실행 형식(.dex)은 단일 파일이 가질 수 있는 클래스의 양에 제한이 있습니다. 더 많은 클래스가 필요한 앱은 API 레벨 21(Android 5.0 롤리팝)부터 추가된 MultiDex 지원 라이브러리를 사용할 수 있습니다. 이 라이브러리는 응용 프로그램의 데이터 디렉터리에서 보조 .dex 파일을 저장하고, 이 디렉토리는 앱 사용자가 writable이며.dex 파일이 필요할 때이 코드를 로드하고 실행합니다.

즉, 공격자가 악의적인 zip 아카이브를 사용하여 오버라이팅하여 .dex 파일을 수정할 수 있으며, 더 나쁜 경우 이 파일이 로드되고 실행되어 원격 코드 실행 취약점이 발생합니다. 이것은 단지 이론적 예가 아니라 앱 스토어에서 1억 다운로드를 기록한 앱 마이 토킹 톰(My Talking Tom)에서 입증되었습니다. 다음은 블랙 햇에서 선보인 악용 동영상입니다.

말하는 톰

항상 zip 라이브러리의 동작을 확인하여 불안감을 인식하십시오. zip 라이브러리에서 경로 통과를 비활성화할 수 없는 경우 각 항목을 추출하기 전에 각 항목의 이름을 유효성검사해야 합니다. 이름은 정식화되어야 하며 결과 경로는 아카이브를 추출하려는 디렉터리에 있어야 합니다. 우리는 그것에 있는 동안, 당신은 또한 zip 폭탄을 방지 하기 위해 추출 된 아카이브의 총 크기를 확인 해야, 하지만이 또 다른 주에 대 한 게시물 될 것입니다.

경로 통과에 대한 몇 가지 문제를 해결하거나 보안 코딩 기술을 테스트하려면 플랫폼을 확인하십시오.

다음에 당신을 보고, 기억, 보안 코드 또는 아니 코드!

- 임의의 수의 "로 이름이 미리 고정된 지퍼에 파일을 삽입할 수 있습니다. / "
- 지퍼 라이브러리가이 경우를 제대로 처리하지 않으면 의도 된 추출 디렉토리 외부에서 작성 할 수 있습니다.
- zip 파일이 신뢰할 수 없는 경우 공격자에게 임의쓰기 취약점이 제공됩니다.

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

리소스 보기
리소스 보기

저자

피터 드 크레머

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

보안 코딩 기술: Zip 라이브러리의 기본 동작으로 원격 코드 실행으로 이어질 수 있습니다.

게시일: 2017년 11월 13일
By 피터 드 크레머

이번 주에 우리는 Zip 라이브러리의 기본 동작에 대해 이야기 할 것입니다. 응용 프로그램 개발자인 경우 이전에 이 것을 사용한 가능성이 매우 높습니다. 인터넷을 통해 다운로드되는 대부분의 리소스는 zip 형식으로 되어 있습니다. 압축 된 데이터는 작기 때문에 더 빨리 다운로드되고 대역폭을 적게 소비합니다.

좀 더 구체적인 예를 원한다면: 게임 텍스처, 키보드에서 자동 완성을 위한 언어 팩, ... 많은 리소스가 응용 프로그램과 함께 자동으로 번들로 제공되는 것이 아니라 나중에 다운로드됩니다.

그러나 이 기능을 사용할 때는 zip 아카이브의 파일 이름에 경로 통과 정보가 포함될 수 있습니다. 추출하면 의도한 디렉터리 외부에서 파일이 생성됩니다. 이것은 종종 기존 파일을 덮어 쓰려는 의도로 수행됩니다.

Zip 아카이브

다음 두 파일이 포함된 zip 아카이브가 있다고 가정해 보겠습니다.

파일1
.. /file2

이 아카이브를 추출하면 zip 디렉토리에서 file1이 예상되는 곳에서 추출됩니다. 그러나 file2는 지퍼 라이브러리에 아카이브를 추출하도록 요청한 곳보다 높은 하나의 디렉터리로 작성되었습니다.

따라서 zip 라이브러리가 이 경우를 제대로 처리하지 않으면 공격자가 시스템에 임의파일을 작성할 수 있습니다. 라이브러리가 안전한지 항상 확인하면 이 엄지 손가락 규칙은 라이브러리에 유효하지만 특히 이러한 유형의 파일에 대해 zip 라이브러리의 기본 동작을 확인하는 것을 알고 있습니다.

이 사례가 Android에서 제대로 처리되지 않을 때 결과를 입증할 수 있습니다. Android에서는 Java Zip 라이브러리(java.util.zip)가 사용되며, 라이브러리는 기본적으로 위에서 설명한 대로 경로를 통과할 수 있도록 합니다.

Androids Dalvik 실행 형식(.dex)은 단일 파일이 가질 수 있는 클래스의 양에 제한이 있습니다. 더 많은 클래스가 필요한 앱은 API 레벨 21(Android 5.0 롤리팝)부터 추가된 MultiDex 지원 라이브러리를 사용할 수 있습니다. 이 라이브러리는 응용 프로그램의 데이터 디렉터리에서 보조 .dex 파일을 저장하고, 이 디렉토리는 앱 사용자가 writable이며.dex 파일이 필요할 때이 코드를 로드하고 실행합니다.

즉, 공격자가 악의적인 zip 아카이브를 사용하여 오버라이팅하여 .dex 파일을 수정할 수 있으며, 더 나쁜 경우 이 파일이 로드되고 실행되어 원격 코드 실행 취약점이 발생합니다. 이것은 단지 이론적 예가 아니라 앱 스토어에서 1억 다운로드를 기록한 앱 마이 토킹 톰(My Talking Tom)에서 입증되었습니다. 다음은 블랙 햇에서 선보인 악용 동영상입니다.

말하는 톰

항상 zip 라이브러리의 동작을 확인하여 불안감을 인식하십시오. zip 라이브러리에서 경로 통과를 비활성화할 수 없는 경우 각 항목을 추출하기 전에 각 항목의 이름을 유효성검사해야 합니다. 이름은 정식화되어야 하며 결과 경로는 아카이브를 추출하려는 디렉터리에 있어야 합니다. 우리는 그것에 있는 동안, 당신은 또한 zip 폭탄을 방지 하기 위해 추출 된 아카이브의 총 크기를 확인 해야, 하지만이 또 다른 주에 대 한 게시물 될 것입니다.

경로 통과에 대한 몇 가지 문제를 해결하거나 보안 코딩 기술을 테스트하려면 플랫폼을 확인하십시오.

다음에 당신을 보고, 기억, 보안 코드 또는 아니 코드!

- 임의의 수의 "로 이름이 미리 고정된 지퍼에 파일을 삽입할 수 있습니다. / "
- 지퍼 라이브러리가이 경우를 제대로 처리하지 않으면 의도 된 추출 디렉토리 외부에서 작성 할 수 있습니다.
- zip 파일이 신뢰할 수 없는 경우 공격자에게 임의쓰기 취약점이 제공됩니다.

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.