반환 지향 프로그래밍
Return-oriented programmingROP(Return-Oriented Programming)는 실행 가능한 공간 보호 및 코드 [3]서명 등의 보안[1][2] 방어가 존재하는 상황에서 공격자가 코드를 실행할 수 있도록 하는 컴퓨터 보안 악용 기법입니다.
이 기술에서 공격자는 프로그램 제어 흐름을 가로채기 위해 콜 스택을 제어하고 "gadgets"[4][nb 1]라고 불리는 기계 메모리에 이미 존재하는 신중하게 선택된 기계 명령 시퀀스를 실행합니다.각 가젯은 일반적으로 반환 명령으로 끝나며 기존 프로그램 및/또는 공유 라이브러리 [nb 1]코드 내의 서브루틴에 위치합니다.이러한 가젯을 함께 연결하면 공격자는 간단한 공격을 저지하는 방어를 사용하는 머신에서 임의의 조작을 실행할 수 있습니다.
배경
반환 지향 프로그래밍은 스택스매싱 공격의 고급 버전입니다.일반적으로 이러한 유형의 공격은 프로그램 내의 버그(대부분 버퍼 오버런)를 이용하여 상대가 콜스택을 조작할 때 발생합니다.버퍼 오버런에서는 사용자가 제공한 데이터를 메모리에 저장하기 전에 적절한 경계 검사를 수행하지 않는 함수는 올바르게 저장할 수 있는 것보다 더 많은 입력 데이터를 받아들입니다.데이터가 스택에 기록되면 초과 데이터가 함수의 변수에 할당된 공간(예: 스택 다이어그램의 "오른쪽의 위치")에 오버플로우하여 반환 주소를 덮어쓸 수 있습니다.이 주소는 나중에 함수에 의해 제어 플로우를 발신자에게 리다이렉트하기 위해 사용됩니다.덮어쓰기된 경우 제어 플로우는 새로운 리턴 주소로 지정된 위치로 전송됩니다.
표준 버퍼 오버런 공격에서는 공격자는 단순히 공격 코드('페이로드')를 스택에 쓴 다음 반환 주소를 새로 작성된 명령의 위치로 덮어씁니다.1990년대 후반까지 주요 운영체제는 이러한 공격에 대한 보호를 제공하지 않았습니다.[5]Microsoft Windows는 2004년까지 버퍼 오버런 보호를 제공하지 않았습니다.결국 운영체제는 데이터가 기록되는 메모리를 실행 불가능한 것으로 표시함으로써 버퍼 오버플로우 버그의 악용에 대처하기 시작했습니다.이 기술은 실행 가능한 공간 보호라고 알려져 있습니다.이 기능을 활성화하면 머신은 사용자가 쓸 수 있는 메모리 영역에 있는 코드 실행을 거부하므로 공격자가 스택에 페이로드를 배치하고 리턴 주소 덮어쓰기를 통해 해당 코드로 이동하는 것을 방지할 수 있습니다.이 보호를 강화하기 위해 나중에 하드웨어 지원을 사용할 수 있게 되었습니다.
데이터 실행 방지 기능을 사용하면 일반적인 버퍼 오버플로는 실행 불가능으로 표시된 메모리의 데이터 섹션에 있는 내용을 덮어쓰기 때문에 악의적인 주입 명령을 실행할 수 없습니다.이를 방지하기 위해 리턴 지향 프로그래밍 공격은 악성 코드를 주입하는 것이 아니라 반환 주소를 조작함으로써 "gadgets"라고 불리는 의도하지 않은 명령을 사용합니다.일반적인 데이터 실행 방지는 이 공격으로부터 방어할 수 없습니다.왜냐하면 상대방이 악성 코드를 사용하지 않고 반환 주소를 변경하여 "좋은" 명령을 조합했기 때문입니다.따라서 사용된 코드는 실행 불가능으로 마크되지 않습니다.
도서관 복귀 기술
데이터 실행 방지가 광범위하게 구현됨에 따라 기존의 버퍼 오버플로 취약성은 위에서 설명한 방법으로 이용하기 어렵거나 이용할 수 없게 되었습니다.대신 공격자는 프로그램 코드 자체 및 링크된 공유 라이브러리와 같이 이미 메모리에 있는 실행 파일로 표시된 코드로 제한되었습니다.libc 등의 공유 라이브러리는 시스템콜을 실행하기 위한 서브루틴 및 공격자에게 잠재적으로 유용한 기타 기능을 포함하고 있는 경우가 많기 때문에 공격을 조립하기 위한 코드를 찾기 위한 가장 유력한 후보입니다.
Return-into-Library 공격에서 공격자는 위에서 설명한 바와 같이 버퍼 오버런 취약성을 이용하여 프로그램 제어 플로우를 하이잭합니다.공격자는 스택에 공격 페이로드 쓰기를 시도하는 대신 사용 가능한 라이브러리 함수를 선택하고 반환 주소를 엔트리 위치로 덮어씁니다.이후 적용 가능한 호출 규칙에 따라 스택 위치를 덮어쓰고 적절한 파라미터를 함수에 신중하게 전달하여 공격자에게 유용한 기능을 수행합니다.이 기술은 1997년 [6]Solar Designer에 의해 처음 소개되었으며, 이후 함수 [7]호출의 무제한 체인으로 확장되었습니다.
빌린 코드 청크
64비트 x86 프로세서의 등장으로 함수에 대한 첫 번째 인수가 스택이 아닌 레지스터로 전달되어야 하는 서브루틴 호출 규약이 변경되었습니다.즉, 공격자는 버퍼 오버런 부정 이용을 통해 콜스택을 조작하는 것만으로 원하는 인수를 사용하여 라이브러리 함수콜을 셋업할 수 없게 되었습니다.공유 라이브러리 개발자는 시스템콜 래퍼 등 공격자에게 특히 유용한 액션을 실행하는 라이브러리 기능을 삭제 또는 제한하기 시작했습니다.그 결과, 도서관 복귀 공격은 훨씬 더 성공적으로 실행하기가 어려워졌습니다.
다음 진화는 단순한 공격에 대한 방어 기능이 있는 머신의 버퍼 [8]오버런 취약성을 이용하기 위해 전체 함수 대신 라이브러리 함수 청크를 사용하는 공격의 형태로 나타났습니다.이 기술은 스택에서 레지스터로 값을 팝업하는 명령 시퀀스를 포함하는 함수를 찾습니다.이러한 코드 시퀀스를 신중하게 선택하면 공격자는 적절한 값을 적절한 레지스터에 삽입하여 새로운 호출 규칙에 따라 함수 호출을 실행할 수 있습니다.나머지 공격은 도서관 복귀 공격으로 진행됩니다.
공격
반환 지향 프로그래밍은 빌린 코드 청크 접근법에 기반하여 이를 확장하여 루프와 조건부 분기를 [9][10]포함한 튜링의 완전한 기능을 공격자에게 제공합니다.다시 말해, 반환 지향 프로그래밍은 공격자가 피해를 입은 머신이 원하는 작업을 수행하도록 하기 위해 사용할 수 있는 완전한 기능의 "언어"를 제공합니다.Hovav Shacham은 2007년에[11] 이 기술을 발표하여 C 표준 라이브러리와 링크된 대상 응용 프로그램에 대한 반환 지향 프로그래밍과 이용 가능한 버퍼 오버런 취약성을 사용하여 모든 중요한 프로그래밍 구조를 시뮬레이션할 수 있는 방법을 시연했습니다.
리턴 지향 프로그래밍 공격은 표현력과 방어 수단 모두에 대해 논의된 다른 공격 유형보다 우수합니다.잠재적으로 위험한 함수를 공유 라이브러리에서 완전히 제거하는 것을 포함하여 위에서 언급한 어떤 역이용 기법도 반환 지향 프로그래밍 공격에 효과적이지 않습니다.
x86 아키텍처의 경우
반환 지향 프로그래밍 공격은 다양한 [11]아키텍처에서 실행할 수 있지만 Shacham의 논문과 후속 작업의 대부분은 인텔 x86 아키텍처에 초점을 맞추고 있습니다.x86 아키텍처는 가변 길이의 CISC 명령 세트입니다.x86 위의 반환 지향 프로그래밍은 명령 집합이 매우 "밀도"라는 사실을 이용합니다. 즉, 임의의 바이트 시퀀스는 유효한 x86 명령 집합으로 해석될 수 있습니다.
따라서 제어 흐름을 변경하는 opcode, 특히 리턴 명령(0xC3)을 검색하고 바이너리 내에서 유용한 명령을 형성하는 이전 바이트를 뒤돌아 볼 수 있습니다.이러한 명령어 세트 "gadgets"는 버퍼 오버런 이용을 통해 반환 주소를 첫 번째 가젯의 첫 번째 명령어 주소로 덮어쓰면서 연결될 수 있습니다.이후 가젯의 첫 번째 주소는 스택에 순차적으로 기록됩니다.첫 번째 가젯의 마지막에 반환 명령이 실행되며, 스택에서 다음 가젯의 주소를 팝업하여 해당 가젯으로 이동합니다.그 기구의 마지막에 체인은 세 번째 체인으로 계속 이어집니다.작은 명령 시퀀스를 체인으로 함으로써 공격자는 기존의 라이브러리 코드로부터 임의의 프로그램 동작을 생성할 수 있습니다.샤캄은 (C 표준 라이브러리를 포함하지만 이에 국한되지 않고) 충분히 많은 양의 코드가 주어진다면 튜링-완전 기능을 [11]위한 충분한 가젯이 존재할 것이라고 주장한다.
가젯을 찾고 바이너리에 [12]대한 공격을 구성하는 프로세스를 자동화할 수 있도록 자동화된 도구가 개발되었습니다.ROPgadget이라고 불리는 이 도구는 잠재적으로 유용한 가젯을 찾는 바이너리를 검색하여 공격 페이로드에 결합하고 공격자로부터 임의의 명령을 받아들이기 위해 셸을 생성합니다.
온 어드레스 공간 레이아웃 랜덤화
주소 공간 레이아웃 랜덤화에도 취약성이 있습니다.Shacham 등의 [13]논문에 따르면, 32비트 아키텍처의 ASLR은 주소 랜덤화에 사용할 수 있는 비트 수에 의해 제한됩니다.32개의 주소 비트 중 16비트만 랜덤화에 사용할 수 있으며 16비트의 주소 랜덤화는 몇 분 만에 브루트 포스 공격에 의해 저지할 수 있습니다.64비트 아키텍처에서는 64비트 중 40비트를 랜덤화에 사용할 수 있습니다.2016년에는 40비트 랜덤화를 위한 무차별적인 공격도 가능하지만 간과될 가능성은 거의 없습니다.또, 랜덤화를 디랜덤화 기법으로 저지할 수 있다.
완전한 랜덤화라고 해도 메모리 컨텐츠의 정보 유출이 있는 경우는,[14] 예를 들면 런타임시에 공유 라이브러리의 베이스 주소를 계산하는 것이 도움이 됩니다.
반품지시 미사용
Checkoway 등의 [15]논문에 따르면 반환 명령을 사용하지 않고 x86 및 ARM 아키텍처에서 반환 지향 프로그래밍을 수행할 수 있다(x86 위의 0xC3).대신 기계 메모리에 이미 존재하는 주의 깊게 조작된 명령 시퀀스를 사용하여 반환 명령처럼 작동합니다.반환 명령에는 두 가지 효과가 있습니다. 첫째, 스택의 맨 위에 있는 4바이트 값을 검색하여 명령 포인터를 해당 값으로 설정하고 둘째, 스택 포인터 값을 4(팝 조작에 상당) 증가시킵니다.x86 아키텍처에서는 jmp 명령 및 pop 명령 시퀀스가 반환 명령으로 동작할 수 있습니다.ARM에서는 로드 및 분기 명령 시퀀스가 반환 명령으로 작동할 수 있습니다.
이 새로운 접근법은 반환 명령을 사용하지 않기 때문에 방어에 부정적인 영향을 미칩니다.방어 프로그램이 여러 번의 복귀뿐만 아니라 여러 번의 점프 명령을 확인할 때 이 공격이 탐지될 수 있다.
방어.
G프리
G-Free 기술은 Kaan Onarlioglu, Leyla Bilge, Andrea Lanzi, Davide Balzarotti, 그리고 Engin Kirda에 의해 개발되었습니다.이것은 가능한 모든 형태의 리턴 지향 프로그래밍에 대한 실용적인 해결책입니다.이 솔루션에서는 바이너리 실행 파일 내의 비정렬 프리브런치명령어(RET이나 CALL 등 공격자가 제어 플로우를 변경하기 위해 사용할 수 있는 명령어)가 모두 삭제되어 공격자가 프리브런치명령어를 사용하지 않도록 보호합니다.G-Free가 리턴 주소를 보호하는 방법은 StackGuard에 의해 구현된 XOR canary와 유사합니다.또, 검증 블록을 부가해 함수 호출의 진위를 체크한다.예상한 결과를 찾을 수 없는 경우 G-Free에 의해 응용 프로그램이 [16]크래시됩니다.
주소 공간 레이아웃 랜덤화
리턴 지향 프로그래밍에 [17]기반한 공격을 전복하기 위한 많은 기술이 제안되었습니다.대부분의 경우 프로그램 및 라이브러리 코드의 위치를 랜덤화하는 데 의존하므로 공격자는 가젯에서 유용할 수 있는 명령의 위치를 정확하게 예측할 수 없으므로 반환 지향 프로그래밍 공격 체인을 성공적으로 마운트할 수 없습니다.이 기술의 매우 일반적인 구현인 주소 공간 레이아웃 랜덤화(ASLR)는 각 프로그램 로드 시 공유 라이브러리를 다른 메모리 위치에 로드합니다.ASLR은 최신 운영체제에 의해 광범위하게 배치되어 있지만 메모리 내의 알려진 라이브러리 함수의 주소를 결정하기 위한 정보 유출 공격 및 기타 접근법에 취약합니다.공격자가 하나의 기존 명령의 위치를 성공적으로 판별할 수 있으면 다른 모든 명령의 위치를 추론할 수 있으며 반환 지향 프로그래밍 공격을 구성할 수 있습니다.
이 랜덤화 어프로치는 라이브러리의 위치뿐만 아니라 프로그램의 모든 명령 및/또는 다른 프로그램 상태(등록 및 [18][19][20]스택 객체)를 개별적으로 재배치함으로써 더욱 진행할 수 있습니다.이를 위해서는 런타임에 랜덤화된 명령어를 조합하기 위해 소프트웨어 다이내믹 번역기 등의 광범위한 런타임 지원이 필요합니다.이 기술은 가젯을 찾고 사용하기 어렵게 만드는 데는 성공하지만 상당한 오버헤드를 수반합니다.
kBouncer에 의해 채택된 다른 접근법은 운영시스템을 변경하여 반환 명령이 실제로 제어 플로우를 콜 명령 직후의 위치로 되돌리는 것을 확인합니다.이는 가젯 체인을 방지하지만 성능 저하가 [clarification needed]크며 반환 [21]대신 점프 및 기타 제어 흐름 수정 명령을 변경하는 점프 지향 프로그래밍 공격에 대해 효과적이지 않습니다.
바이너리 코드 랜덤화
Cloud Lambda(FaaS) 및 IoT 원격 업데이트와 같은 일부 최신 시스템은 소프트웨어 배포 전에 클라우드 인프라를 사용하여 즉시 컴파일을 수행합니다.실행 중인 소프트웨어의 각 인스턴스에 변화를 도입하는 기술은 ROP 공격에 대한 소프트웨어의 내성을 크게 높일 수 있습니다.Cloud Lambda를 무차별적으로 강제하면 랜덤화된 소프트웨어의 여러 인스턴스를 공격하여 공격의 효과를 떨어뜨릴 수 있습니다.Asaf Selly는 2017년에[22] 이 기술을 발표하여 소프트웨어 업데이트 시스템에서 바이너리 랜덤화의 사용을 시연했습니다.클라우드 기반 서비스는 업데이트된 모든 장치에 대해 코드에 변형을 도입하고 온라인 컴파일을 수행하고 바이너리를 디스패치했습니다.ROP 공격은 소프트웨어의 내부 구조에 대한 지식에 의존하기 때문에 이 기술은 매우 효과적입니다.이 기술의 단점은 랜덤화 소프트웨어의 모든 변형을 테스트할 수 없기 때문에 소프트웨어가 도입되기 전에 완전히 테스트되지 않는다는 것입니다.즉, 많은 바이너리랜덤화 기술은 네트워크인터페이스 및 시스템프로그래밍에 적용 가능하며 복잡한 알고리즘에는 권장되지 않습니다.
세홉
Structured Exception Handler Overwrite Protection은 가장 일반적인 스택 오버플로 공격, 특히 Structured Exception Handler에 대한 공격으로부터 보호하는 Windows의 기능입니다.
제어 흐름 공격에 대한 대응
사물인터넷(IoT)의 보급으로 소형 임베디드 시스템이 확산되면서 이에 대한 보호의 필요성도 높아지고 있다.하드웨어에 구현된 Instruction Based Memory Access Control(IB-MAC; 명령 기반 메모리액세스 컨트롤)을 사용하면 저비용 임베디드 시스템을 악의적인 제어 흐름 및 스택 오버플로 공격으로부터 보호할 수 있습니다.데이터 스택과 리턴 스택을 분리하여 보호할 수 있습니다.그러나 일부 임베디드 시스템에는 메모리 관리 유닛이 없기 때문에 하드웨어 솔루션을 모든 임베디드 [23]시스템에 적용할 수는 없습니다.
리턴 지향 루트킷에 대해서
2010년, Jinku Li 등에서는[24] 적절히 수정된 컴파일러가 각각의 컴파일러를 대체함으로써 반환 지향의 "가젯"을 완전히 제거할 수 있다고 제안했다.call f
명령 시퀀스와 함께
그리고 각각pushl $index
; jmp f
ret
명령 시퀀스와 함께
,어디에popl %reg
; jmp table(%reg)
table
프로그램 내의 모든 "추정" 반환 주소의 불변의 표를 나타냅니다.index
는 테이블 [24]: 5–6 내의 특정 인덱스를 나타냅니다.이렇게 하면 함수의 끝에서 다른 함수의 중간에 임의의 주소로 바로 돌아오는 반환 지향 가젯이 생성되는 것을 방지할 수 있습니다. 대신 가젯은 "합법적인" 반환 주소로만 반환될 수 있으므로 유용한 가젯을 만드는 것이 매우 어렵습니다.Li 등은 "우리의 리턴 간접 기법은 본질적으로 리턴 지향 프로그래밍을 이전 스타일의 [24]립으로 되돌리는 일반화를 배제한다"고 주장했다.그들의 개념 증명 컴파일러는 다음과 같은 "연산 코드 또는 즉시 [24]피연산자에 리턴 opcode를 포함하는 특정 기계 명령"을 다루기 위한 peephole 최적화 단계를 포함하였습니다.movl $0xC3, %eax
.
포인터 인증 코드(PAC)
그 ARMv8.3-A 아키텍처는 하드웨어 수준에서 cipher[25][26]요구되는 값(일반적으로 반송 주소)"로컬 전후 관계"값과 결합하면(예를 들어, 사용하지 않는 비트의 포인터 주소 공간에 암호로 포인터 주소한 특별히 설계된tweakable 블록을 사용하여 이용하고 있는 새로운 기능을 소개한다. 스택 pointer)를 클릭합니다.
기밀 조작을 실행하기 전에(즉, 저장된 포인터로 되돌리기) 시그니처를 체크하고, 부정 콘텍스트에서의 조작이나 사용을 검출할 수 있습니다(예를 들면, 부정 액세스 트램펄린 콘텍스트로부터의 보존된 리턴 주소를 활용하는 것).
특히 아이폰에 사용되는 Apple A12 칩은 ARMv8.3으로 업그레이드되어 PAC를 사용하고 있습니다.Linux는 2020년에 출시된 버전 5.7에서 커널 내의 포인터 인증 지원을 획득했으며,[27] 2018년에 사용자 공간 애플리케이션에 대한 지원이 추가되었습니다.
「 」를 참조해 주세요.
- 블라인드 리턴 지향 프로그래밍
- 정수 오버플로
- JIT 분무
- SROP(Sigreturn Oriented Programming)
- 스레드 코드– 반환 지향 프로그래밍은 스레드 코드의 재발견입니다.
메모들
레퍼런스
- ^ Vázquez, Hugo (2007-10-01). "Check Point Secure Platform Hack" (PDF). Pentest. Barcelona, Spain: Pentest Consultores. p. 219.
- ^ "Thread: CheckPoint Secure Platform Multiple Buffer Overflows". The Check Point User Group.
- ^ Shacham, Hovav; Buchanan, Erik; Roemer, Ryan; Savage, Stefan. "Return-Oriented Programming: Exploits Without Code Injection". Retrieved 2009-08-12.
- ^ Buchanan, E.; Roemer, R.; Shacham, H.; Savage, S. (October 2008). "When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC" (PDF). Proceedings of the 15th ACM conference on Computer and communications security - CCS '08. pp. 27–38. doi:10.1145/1455770.1455776. ISBN 978-1-59593-810-7. S2CID 11176570.
- ^ Microsoft Windows XP SP2 데이터 실행 방지
- ^ Solar Designer, Return-to-lib(c) 악용, Bugtraq
- ^ Nergal, Prack 58 제4조, Return-to-lib(c) 악용
- ^ Sebastian Krahmer, x86-64 버퍼 오버플로우 악용 및 빌린 코드 청크의 악용 기법, 2005년 9월 28일
- ^ Abadi, M. N.; Budiu, M.; Erlingsson, Ú.; Ligatti, J. (November 2005). "Control-Flow Integrity: Principles, Implementations, and Applications". Proceedings of the 12th ACM conference on Computer and communications security - CCS '05. pp. 340–353. doi:10.1145/1102120.1102165. ISBN 1-59593-226-7. S2CID 3339874.
- ^ Abadi, M. N.; Budiu, M.; Erlingsson, Ú.; Ligatti, J. (October 2009). "Control-flow integrity principles, implementations, and applications". ACM Transactions on Information and System Security. 13: 1–40. doi:10.1145/1609956.1609960. S2CID 207175177.
- ^ a b c Shacham, H. (October 2007). "The geometry of innocent flesh on the bone: return-into-libc without function calls (on the x86)". Proceedings of the 14th ACM conference on Computer and communications security - CCS '07. pp. 552–561. doi:10.1145/1315245.1315313. ISBN 978-1-59593-703-2. S2CID 11639591.
- ^ Jonathan Salwan과 Allan Wirth, ROPgadget - 가젯 파인더 및 오토로퍼
- ^ [샤참 외, 2004]호바브 샤참, 매튜 페이지, 벤 파프, 고은진, 나겐드라 모다두구, 댄 본.주소 공간 랜덤화의 효과에 대해서.2004년, 제11회 컴퓨터 및 통신 보안에 관한 ACM 회의의 속행.
- ^ [베넷 외, 2013]제임스 베넷, 이청린, 투피크 하크더 넘버 오브 더 비스트, 2013년https://www.fireeye.com/blog/threat-research/2013/02/the-number-of-the-beast.html
- ^ CHECKOWAY, S., DAVI, L., DMITRIENKO, A., SADEGHI, A.-R., SHACHAM, H. 및 WINANDY, M. 2010.반환이 없는 반환 지향 프로그래밍.CCS 2010 의사록 A.케로미티스와 브이.슈마티코프, 에드ACM 프레스, 559-72
- ^ ONARLIOGLU, K., BILGE, L., LANZI, A., BalZarotti, D. 및 KIRDA, E. 2010.G-Free: 가젯이 필요 없는 바이너리를 통해 반환 지향 프로그래밍을 물리칩니다.ACSAC 2010의 Proceedings of ACSAC 2010, M.프란츠와 J. 맥더모트, 에드ACM 프레스, 49-58.
- ^ Skowyra, R.; Casteel, K.; Okhravi, H.; Zeldovich, N.; Streilein, W. (October 2013). "Systematic Analysis of Defenses against Return-Oriented Programming" (PDF). Research in Attacks, Intrusions, and Defenses. Lecture Notes in Computer Science. Vol. 8145. pp. 82–102. doi:10.1007/978-3-642-41284-4_5. ISBN 978-3-642-41283-7. Archived from the original (PDF) on 2014-02-22.
- ^ Venkat, Ashish; Shamasunder, Sriskanda; Shacham, Hovav; Tullsen, Dean M. (2016-01-01). "HIPStR: Heterogeneous-ISA Program State Relocation". Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems. ASPLOS '16. New York, NY, USA: ACM: 727–741. doi:10.1145/2872362.2872408. ISBN 9781450340915. S2CID 7853786.
- ^ Hiser, J.; Nguyen-Tuong, A.; Co, M.; Hall, M.; Davidson, J. W. (May 2012). "ILR: Where'd My Gadgets Go?". 2012 IEEE Symposium on Security and Privacy. pp. 571–585. doi:10.1109/SP.2012.39. ISBN 978-1-4673-1244-8. S2CID 15696223.
- ^ US 9135435, Venkat, Ashish; Krishnaswamy, Arvind & Yamada, Koichi 등, "Binary translator driven program state relocations" (바이너리 번역자 주도 프로그램 국가 이전) 2015-09-15년 발행, Intel Corporation에 할당되었습니다.
- ^ Vasilis Pappas. kBouncer: 효율적이고 투과적인 ROP 경감.2012년 4월
- ^ US application 2019347385, Shelly, Asaf, "코드 돌연변이에 의한 보안 방법 및 시스템"은 포기된 이후 2019-11-14를 발행했다.
- ^ Francillon, A., PERITO, D. 및 카스텔루치아, C. 2009.임베디드 시스템을 제어 흐름 공격으로부터 보호합니다.S. Lachmund와 C.는 SecuCode 2009의 Proceedings에 기재되어 있습니다.셰퍼, 에드ACM 프레스, 19~26.
- ^ a b c d Jinku LI, Zhi WANG, Xuxian JIANG, Mike GRACE, Sina BAHRAM."return-less" 커널을 사용하여 반환 지향 루트킷을 물리칩니다.G. Muller에 의해 편집된 EuroSys 2010 Proceedings of EuroSys 2010.ACM 프레스, 195–208.
- ^ Avanzi, Roberto (2016). The QARMA Block Cipher Family (PDF). IACR Transactions on Symmetric Cryptology (ToSC). Vol. 17 (published 2017-03-08). pp. 4–44. doi:10.13154/tosc.v2017.i1.4-44. Archived from the original (PDF) on 2020-05-13.
- ^ Qualcomm Product Security. "Pointer Authentication on ARMv8.3" (PDF). Qualcomm Technologies Inc. Archived (PDF) from the original on 2020-06-06. Retrieved 2020-06-16.
Thus, we designed QARMA, a new family of lightweight tweakable block ciphers.
- ^ "Linux 5.7 For 64-bit ARM Brings In-Kernel Pointer Authentication, Activity Monitors - Phoronix". www.phoronix.com. Retrieved 2020-03-31.
- ^ 차인표는 상 길;박세리, 브라이언, Brumley, David;립턴, 리차드 제이(2010-10-08)[2010-10-04].플랫폼 독립 프로그램(PDF).컴퓨터 통신 보안(CCS'10)에 17ACM컨퍼런스 논문집.일리노이 주, 시카고 미국:카네기 Mellon대학교, 펜실베니아 주 피츠버그, 미국/조지아 공과 대학, 조지아, 아틀란타, 미국.를 대신하여 서명함. 547–558. doi:10.1145/1866307.1866369.아이 에스비엔 978-1-4503-0244-9.그 2022-05-26에 원래에서Archived(PDF).2022-05-26 Retrieved.[1](12페이지)(참고 항목:[2])(NB다. 프로그램 논리 이 경우 가젯 헤더와 가젯 몸으로. 덩어리들, 기한 가젯을 사용합니다.).