Computer Security

#2 기본 시스템 용어1 본문

시스템 해킹

#2 기본 시스템 용어1

쿠리 Kuri 2022. 6. 6. 18:30

어셈블리어에서  {   } -> push 와 pop 으로 처리된다.

                            return 0 같은경우는 ex)  xor eax, eax 처리된다.

 

파이프라인 : CPU와 같은 디지털 집적회로의 속도를 향상시키기 위한 회로 내지는 회로설계 기법을 지칭한다.

CPU의 명령어 파이프라인에 대한 전통적인 설명은 4단 파이프라인 구조를 통한 것이며 대체로 다음과 같은 명칭을 가지고 있다.
  • 1단계: fetch(명령어를 메모리에서 인출)
  • 2단계: decode(명령어 해석)
  • 3단계: execute(명령어 실행)
  • 4단계: writeback(라이트백)

4단 파이프라인에서 작업 A와 B를 처리할 때(트랜지스터 40개, 동작속도 40Hz):
1사이클: fetch(A) → 2사이클 fetch(B),decode(A) → 3사이클 decode(B),execute(A) → 4사이클 execute(B),writeback(A,완료) → 5사이클 writeback(B,완료)
순서이고 40Hz/40=1Hz의 속도를 내던 CPU가 40Hz/10=4Hz 속도를 내므로 2작업을 5사이클(1.25초)만에 끝마칠수 있고, 파이프라인이 없다는 가정하에 1작업이 1사이클이 소모되므로 2초가 걸린다.

쉽게 설명하자면 파이프라인이 도입되기 전에는 1명이 하나의 일을 처음부터 끝까지 처리했다면 파이프라인이 도입 이후에는 한가지 작업만 할수있는 사람 여러명을 차례대로 놔두고 하나의 큰 작업을 조그만 작업으로 쪼개서 다음사람에게 순서대로 넘기는 방식으로 실행한다. 이렇게되면 하나의 작업을 1명이 할때 걸리는 시간보다 다음 사람한테 넘기는 시간이 훨씬 짧기 때문에 클럭을 올리기 쉬워지게 되어 특정 조건에서 동작 속도를 크게 올릴 수 있다.
 

취약점 공격 또는 익스플로잇(exploit):   컴퓨터의 소프트웨어나 하드웨어 및 컴퓨터 관련 전자 제품의 버그, 보안 취약점 등 설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 절차나 일련의 명령, 스크립트, 프로그램 또는 특정한 데이터 조각을 말하며, 이러한 것들을 사용한 공격 행위를 이르기도 한다.

취약점 공격은 주로 공격 대상 컴퓨터의 제어 권한 획득이나 서비스 거부 공격(DoS) 등을 목적으로 한다.

 

취약점 공격의 종류는 그 구분 방법에 따라 여러 가지로 나눌 수 있으나 대표적인 몇 가지를 나열하면 다음과 같다.

  • 이용하는 보안 취약점의 종류에 따라 BOF 취약점 공격, CSRF 취약점 공격, XSS 취약점공격, 기타 등등 
  • 취약점 공격이 실행되는 곳에 따라
    • 로컬 취약점 공격 : 취약점 공격이 공격 대상 자체에서 실행됨.
    • 원격 취약점 공격 : 공격자의 컴퓨터에서 실행되어 다른 컴퓨터를 공격 대상으로 함.
  • 취약점 공격이 초래하는 결과(목적)에 따라 EoP 취약점 공격, DoS 취약점 공격, 스푸핑 취약점 공격, 기타 등등
  • 소프트웨어 취약점이 개발자에게 알려지지 않아 패치가 없는 시점에서 만들어져 사용되는 것을 특히 제로 데이 취약점 공격이라고 한다.

 


후킹(hooking)

-소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다.

-이때 이러한 간섭된 함수 호출, 이벤트 또는 메시지를 처리하는 코드를 (hook)이라고 한다.

-크래킹(불법적인 해킹)을 할 때 크래킹 대상 컴퓨터의 메모리 정보, 키보드 입력 정보 등을 빼돌리기 위해서 사용되기도 한다.

-예를 들어 특정한 API를 후킹하게 되면 해당 API의 리턴값을 조작하는 등의 동작을 수행할 수 있다.


 

 

리버스 엔지니어링(reverse engineering, RE) 또는 역공학

-장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정이다.

-이것은 종종 대상(기계 장치, 전자 부품, 소프트웨어 프로그램 등)을 조각내서 분석하는 것을 포함한다.

-그리고 유지 보수를 위해, 또는 같은 기능을 하는 새 장치를 원본의 일부를 이용하지 않고 만들기 위해 대상의 세부적인 작 동을 분석하는 것을 포함한다.

-리버스 엔지니어링의 기원은 상업적 또는 군사적으로 하드웨어를 분석한 것에서 시작되었다.

-목적은 원본 생산의 절차에 관한 지식이 거의 없는 상태에서, 최종 제품을 가지고 디자인 결정과정을 추론하는 것이다.

-같은 기술이 레거시 소프트웨어 시스템을 응용하기 위해 현재 연구되고 있는데, 산업이나 국방이 아니고, 오류, 미완성, 접근 불가인 문서를 수정하기 위함이다

 

사용 이유

  • 소프트웨어 간의 상호 운용성
  • 사라진 문서
  • 상품 분석
  • 디지털 업데이트/수정
  • 호환성 부품개발 및 성능향상
  • 안전 감사
  • 군사 또는 산업 간첩
  • 복제 보호 해제
  • 허가되지 않은 불법 복제의 생성
  • 소프트웨어 불법 정품 인증 및 시리얼 코드 생성
  • 소프트웨어 키젠  크랙 생성
  • 학술/학문적 추구
  • 호기심
  • 경쟁사의 기술 정보 분석
  • 악성코드 분석
  • 소프트웨어 보안성 테스트

 


버퍼 오버플로(buffer overflow) 또는 버퍼 오버런(buffer overrun)

-메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 

-컴퓨터 보안과 프로그래밍에서는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미한다.

-벗어난 데이터는 인접 메모리를 덮어 쓰게 되며 이때 다른 데이터가 포함되어 있을 수도 있는데, 손상을 받을 수 있는 데이터는 프로그램 변수와 프로그램 흐름 제어 데이터도 포함된다.

-이로 인해 잘못된 프로그램 거동이 나타날 수 있으며, 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 또는 시스템 보안 누설이 발생할 수 있다.

-버퍼 오버플로가 코드를 실행시키도록 설계되거나 프로그램 작동을 변경시키도록 설계된 입력에 의해 촉발될 수 있다.

-따라서 이는 많은 소프트웨어 취약점의 근간이 되며 악의적으로 이용될 수 있다. 

-경계 검사로 버퍼 오버플로를 방지할 수 있다.

-버퍼 오버플로는 보통 데이터를 저장하는 과정에서 그 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아 발생한다.

-이러한 경우 데이터가 담긴 위치 근처에 있는 값이 손상되고 그 손상이 프로그램 실행에 영향을 미칠 수도 있다.

-특히, 악의적인 공격으로 인해 프로그램에 취약점이 발생할 수도 있다.

-흔히 버퍼 오버플로와 관련되는 프로그래밍 언어는 C와 C++로, 어떤 영역의 메모리에서도 내장된 데이터 접근 또는 덮어쓰기 보호 기능을 제공하지 않으며 어떤 배열에 기록되는 데이터가 그 배열의 범위 안에 포함되는지 자동으로 검사하지 않는다.


힙 오버플로(heap overflow)

-힙 데이터 영역에서 발생하는 버퍼 오버플로의 한 종류이다.

-힙 오버플로는 스택 기반 오버플로와는 다른 방식으로 익스플로잇 가능하다.

-힙에서의 메모리는 런타임 시에 애플리케이션에 의해 동적으로 할당되며 일반적으로 프로그램 데이터를 포함한다.

-익스플로잇은 애플리케이션이 링크드 리스트 포인터 같은 내부 구조체를 겹쳐쓰는 것 같이 이 데이터를 특정한 방식으로 오염시킴으로써 수행된다.

-고전적인 힙 오버플로 기법은 동적 메모리 할당 연결(malloc 메타 데이터 같은)을 겹쳐쓰고 프로그램 함수 포인터를 겹쳐쓰기 위해 결과로 나온 포인터를 교환하는 기법이다.

-옛날 버전의 리눅스에서의 전형적인 예시는 힙에서 두 버퍼가 각각 나란히 할당되고, 첫 번째 버퍼의 경계 외부에 쓰는 것이 두 번째 버퍼의 메타 데이터를 겹쳐쓰게되는 것이다. 

-두 번째 버퍼의 사용 비트를 0으로 설정하고 널 바이트들이 복사되게 하기 위해 작은 음수 값을 길이로 설정한 후에, 첫 번째 버퍼에서 프로그램이 free() 함수를 호출할 때 프로그램은 이 두 버퍼를 단일 버퍼로 통합하려는 시도를 할 것이다.

-이 상황이 벌어지면 free될 버퍼는 이전에 할당된 버퍼의 첫 8 바이트에 포워드와 백이라는 두 포인터를 갖게 된다.

'시스템 해킹' 카테고리의 다른 글

#4 pwntools  (0) 2022.06.08
#3 기본 시스템 용어2  (0) 2022.06.07
#1 Tool : gdb  (0) 2022.06.03
Comments