2010-03-02 4 views
5

'보통'ARM 명령어는 고정 길이 - 32 비트입니다. ARM 명령어가 다른 명령어의 중간에 뛰어들 수는 없으며 x86 명령어로 수행하기 쉽습니다. ARM은보다 안전한 명령어 세트입니까?

(86 들어, 구글의 NaCl을 32 바이트 경계에 대한 지침을 맞춰이 '수정'.에 시도)합니까이 메이크업의 ARM 프로그램 더 안전하거나 특정 공격에 대한 저항력?

그렇다면 Thumb 및 Java 명령어로 확장됩니까?

+5

공격자가 프로그램 카운터가 지시 사항과 잘못 정렬 될 수있는 위치에 있다면 그는 이미 다른 곳의 보안 취약점을 악용하고있을 가능성이 있습니다. 시스템의 보안이 이미 손상되었습니다. –

+0

ARM 코드로 가능합니까? – philcolbourn

답변

3

opcode를 샌드 박스 프로세스로 스캔 할 때 더 안전 할 수있는 곳입니다. 일부 명령어를 금지하거나 차단하려면 고정 길이 명령어 세트에서 쉽게 수행 할 수 있습니다. x86 아키텍처에서 명령어 세트는 컨텍스트에 따라 다르며 명령어의 길이는 가변적이므로 올바른 오프셋에서 구문 분석하면 무해한 명령어가 실제로 다른 명령어를 포함 할 수 있습니다. 효과적으로 "지시의 한가운데 점프"하고 유효한 지시를받을 수 있습니다.

ARM은 구문 분석하기가 쉽고 엄지 모드는이를 변경하지 않습니다. 따라서 ARM 명령어 세트는 그 자체로 특별히 안전하지는 않지만 구문 분석하기가 훨씬 쉬우 며 샌드 박싱과 같은 NaCl에 구문 분석을 올바르게 수행해야합니다.

이것은 짧고 부정확 한 대답입니다. 보다 명확한 답변을 원하시면 우수 matasano 블로그의 blog post 을보십시오

1

스택 반송 주소 또는 이와 유사한 것을 공격하여 그 페이로드로 바로 갈 수 있다고 생각하십니까? 단어 정렬은 상상할 수있는 큰 도움이나 힌드가 아닙니다. 페이로드를 4 바이트 정렬해야합니다. 아, 그리고 x64는 16 바이트 명령어 정렬이 필요합니다.

이게 무슨 뜻인가요? 감사!

+0

8 바이트? (8 비트 x 8 = 64 비트) – helios

+0

Google의 NaCl은 32 비트 모드에서 32 바이트 정렬을 사용한다고 생각합니다. 그들은 (현재?) 64 비트 모드를 지원하지 않습니다. http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/documentation/nacl_paper.pdf http://code.google.com/p/nativeclient/ – philcolbourn

+2

x64 (x86과 유사) 명령 정렬을 전혀 필요로하지 않습니다. 일부 명령어 (SSE)는 ** 데이터 **가 16 바이트로 정렬되어야합니다. 그러나 확실히 지침 자체는 조정될 필요가 없습니다. 그들 중 많은 바이트는 결국 1 바이트입니다. :) –