분류 전체보기 219

gdb를 통한 Stack buffer overflow

버퍼는 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시 보관하는 메모리 영역이다. 이 버퍼는 항상 정해진 일정 크기를 가지는데, 이 '정해진 일정 크기'를 넘는 데이터를 입력하는 현상이 바로 버퍼 오버플로이다. 따라서 버퍼 오버플로 공격은 '버퍼에 정해진 일정 크기 이상의 데이터를 입력하여 프로그램을 공격하는 행위'라고 할 수 있다. 프로그램이 사용하는 버퍼는 메모리의 스택과 힙에 존재할 수 있다. 따라서 스택에 존재하는 버퍼 공격이나, 힙에 존재하는 버퍼 공격이냐에 따라 스택 버퍼 오버플로와 힙 버퍼 오버플로로 구분한다. 먼저 스택 버퍼 오버플로 공격을 알아볼 것이다. 이 공격은 모든 경우에 가능하지 않고, 프로그래머가 취약한 특정 함수를 사용해야 가능하다. 그리하여 이론상 취약한 함수를 사용하지 ..

Security_lab 2021.07.27

OPTEE pc레지스터 & secure storage(수정중)

현재 구조에서 ta에서 main 문에 해당하는 부분에 system call 호출 코드를 넣고 컴파일 했을때 elf파일을 보면 이런식으로 찍힌다. 해당 system call의 number같은 것들을 넣어주는것들이 있거나 호출할때 system call number로 호출하는줄 알았는데 그렇지 않고 그냥 이름으로 호출을 한다. 따라서 미리 systemcall number를 넣는 명령어 같은것을 안넣어줘도 되지 않을까 예상함 (AArch32와 달리 PC(프로그램 카운터)와 SP(스택 포인터)는 인덱싱되지 않은 레지스터입니다. 액세스할 수 있는 방법에 제한을 받습니다. 또한 x31 레지스터가 없다는 점에 유의해야 합니다. 인코딩은 특수한 용도로 사용됩니다.) 근데 core/arch/arm/include/arm64..

Study 2021.07.26

레이스 컨디션 실습

레이션 컨디션은 관리자 권한으로 실행되는 프로그램 중간에 끼어들어 자신이 원하는 작업을 하는 것이다. 물론 타이밍이 가장 중요하며, 타이밍을 맞추는 것이 쉽지는 않지만, 그렇다고 특별한 기술이 필요한 것도 아니다. 레이스 컨디션 공격과 관련되어 미리 알아두어야 할 내용을 보자. * 파일 링크 1) 하드 링크 하드 링크는 간단히 설명하면 똑같이 복사된 파일을 만드는 것이다. 실제 하드 링크를 생성하여 살펴보자 link.txt의 링크의 수가 2가 되었다. 링크가 아니었다면 1일 것이다. 이렇게 하드 링크된 파일을 수정하면 원래 파일인 a.txt도 같이 수정된다. 또 두 파일중 하나를 삭제하면 파일 내용은 바뀌지 않고 링크 숫자만 하나 줄어든다. 즉 데이터의 동기화가 일어난다고 보면 된다. 하드 링크에는 제약..

Security_lab 2021.07.25

OPTEE Systemcall Hash연산

Systemcall 내에서 들어온 인자에 대해서 Hash값을 구하여 저장하고자 한다. SystemCall Handler는 /core/tee/tee_svc.c에 있다. 이미 구현된 코드들이 있을것이기에 해당 헤더파일을 본다. tee_cryp_utl.h가 암호화 관련 함수들이 있을것으로 보인다. 사용예제를 보기 위해 tee_cryp_utl.c에 있는 함수중 handler에서 쓰는것을 찾아보니 하나가 나온다. 이 함수내의 tee_hash_create ~ 관련 함수들은 core 내의 crypto.h와 libcrpy 폴더내의 소스들을 이용한다. 함수를 보면 prop에게 고유한 uuid를 생성해주기 위한 함수인것 같다. data 에 optee라는 고정된 문자를 넣고 sha256 해쉬함수를 거쳐서 나온것에대해 dig..

Study 2021.07.25

ELF파일

제일 처음 .c 파일을 작성하여 생성한다. 이 소스파일이 컴파일되는 과정을 살펴보자 .c파일은 .i 파일로 가는 전처리기 과정을 거친다. 이 과정은 헤더파일 삽입과 매크로 치환 및 적용 과정을 거친다. 두 번째로는 C 컴파일러 과정을 거쳐서 .i 파일이 .asm파일로 간다. 여기서는 중간언어를 생성하는 것인데 이유는 언어 종속적인 부분과 기계 종속적인 부분을 분리하여 컴파일러를 모듈화 하고 최적화하기 위해서이다. 세 번째로는 어셈블러를 이용하여 .asm파일이 .o 파일로 바뀐다. .o파일은 .s의 기계어와 데이터가 들어있는 ELF바이너리 포맷의 구조를 가진다. 여기서 ELF(Executable and linking format)이란 실행 및 링크가 가능한 포맷이다. ( exe파일과 비슷) ELF이 필요한..

Study 2021.07.25

OPTEE system call 실습

optee 내에서 client가 api를 호출하는 경우 TEEC operation을 사용한다. 이는 optee_client에 있다. 호출이 되는 순서는 다음을 따른다. 이는 user 영역에서 kernel -> smc를 거쳐 -> tee의 함수를 실행시킨다. User application: TEEC_InvokeCommand() https://github.com/OP-TEE/optee_client/blob/master/libteec/src/tee_client_api.c#L555 Here ioctl() invocation occurs (it's right in TEEC_InvokeCommand implementation) https://github.com/OP-TEE/optee_client/blob/maste..

Study 2021.07.24

John the ripper,johnny 와 Hash

이번에는 칼리에서 제공하는 john the ripper를 통해 패스워드 무차별 대입 공격을 해보고 해시 개념을 알아보려고 한다. 패스워드를 보관하는 방법은 두 가지가 있다. 1. 패스워드를 그대로 보관 이 방법의 경우 해당 사이트가 해킹 당하면 한 번에 모든 사용자의 패스워드가 노출되게 된다. 즉 보안적으로 매우 취약한 방법이다. 2. 해쉬함수를 이용한 암호화 가장 대표적인 방법이며 많은 곳에서 사용하는 방식이다. 해쉬 함수란 수학적으로 역함수가 존재하지 않는 함수이다. 이런 경우 y값을 보고 x값을 찾아낼 수가 없다. 해쉬 함수의 특성에 관련된 부분은 information_securty 카테고리에 게시할 예정이다. 이러한 해쉬 함수의 종류는 다양하게 존재하지만 대표적으로 MD5,SHA-1같은게 있다. ..

Security_lab 2021.07.23

ARM TrustZone 메커니즘

컴퓨터 보안에 대한 필요성이 강조되고 있다. 하지만 완벽한 보안을 제공하는 시스템은 존재하지 않는다. 여러 공격 위협에 대응하기 위해, 학계와 산업계에서는 신뢰할 수 있는 실행환경, 즉 TEE를 제공하려는 노력을 계속하고 있다. 예를 들면 Intel은 SGX이라는 기능을 탑재한 프로세서를 제공하고 있고 AMD는 SME/SEV를 제공한다. ARM은 Trustzone이라는 하드웨어 아키텍처를 제공한다. Trustzone은 하나의 물리적 CPU에서 Normal world와 Secure world라는 두 개념의 World를 제공한다. CPU가 어느 world에 있는지는 간단하게도 SCR(=Secure Configuration Register)라는 레지스터에 NS-Bit에 따라 결정된다. NS = 1이면 Norm..

Study 2021.07.22

ARMv8

Cortex-A 프로세서 : Cortex-A는 Armv7-A, Armv8-A 아키텍처를 사용해 만든 프로세서. 고성능을 필요로 하는 애플리케이션용으로 개발된 프로세서이며 주로 스마트폰에 사용 Cortex-R 프로세서 : Cortex-R는 Armv7-R, Armv8-R 아키텍처를 사용. 실시간성을 필요로 하는 응용분야를 위해 개발된 프로세서. 자동차의 브레이크 시스템, 항공시스템, 공장자동화에 사용되는 PLC(Programmale Logic Coontroller)와 같은 실시간 응답이 아주 중요한 분야에 사용된다. Cortex-M 프로세서 : Cortex-M는 Armv7-M, Armv8-M 아키텍처를 사용해 만든 프로세서. 저비용,저전력 , 저성능 용으로 개발된 프로세서이다. 저전력을 필요로 하기 때문에 ..

Study 2021.07.22

PLT 와 GOT

PLT와 GOT에 대해서 흘려 들었던 적은 많으나 제대로 정리가 안 돼있어서 찾아보고 나름대로 정리를 해두려고 한다. PLT (Procedure Linkage Table) : 외부 프로시저를 연결해주는 테이블. GOT (Global Offset Table) : PLT가 참조하는 테이블. 프로시저들의 주소가 들어있다. 이까지 보면 무슨 소리인지 감이 잘 잡히지 않는다. PLT와 GOT를 왜 사용하는지에 대해서는 링커 개념때문이다. 나의 소스 파일이 .c ->. s ->. o까지 왔다면 이후에는 링커 과정을 거쳐서 라이브러리 파일을 연결시켜줘야 실행 파일로 바뀔 수 있다. 이런 과정에는 static linking과 dynamic linking이 있다. Static linking의 경우 프로그램이 필요로 하는..

System Software 2021.07.21