Computer Security

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

시스템 해킹

#3 기본 시스템 용어2

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

ELF(Executable and Linkable Format)

:

실행 파일, 목적 파일, 공유 라이브러리 그리고 코어 덤프를 위한 표준 파일 형식이다. 1999년 86open 프로젝트에 의해 x86 기반 유닉스, 유닉스 계열 시스템들의 표준 바이너리 파일 형식으로 선택되었다.

 

파일 레이아웃

-각 ELF 파일은 하나의 ELF 헤더와 파일 데이터로 이루어진다. 파일 데이터는 다음을 포함한다.

  • 0개 또는 그 이상의 세그먼트들을 정의하는 프로그램 헤더 테이블
  • 0개 또는 그 이상의 섹션들을 정의하는 섹션 헤더 테이블
  • 프로그램 헤더 테이블 또는 섹션 헤더 테이블의 엔트리들에 의해 참조되는 데이터

-섹션들이 링킹과 재배치에 필요한 중요한 정보를 포함하는 반면, 세그먼트들은 파일의 런타임 실행에 필요한 정보를 포함한다.

-전체 파일의 어떤 바이트도 최대 한 개의 섹션에 의해 소유될 수 있으며 어떠한 섹션에 의해서도 소유되지 않은 고아 바이트들이 존재할 수 있다.

 
ELF 파일은 두 관점을 갖는다: 프로그램 헤더는 런타임 시 사용되는 세그먼트들을 보여주고, 섹션 헤더는 바이너리의 섹션들의 집합을 나열한다.
 

 

실행 파일

 

컴퓨터 공학에서 실행 파일은 단순히 데이터만 담고 있는 파일과 달리 코드화된 명령에 따라 지시된 작업을 수행하도록 하는 컴퓨터 파일을 말한다. 

인터프리터나 CPU, 또는 가상 머신을 위한 명령을 포함하는 파일들은 실행 파일로 생각될 수 있지만 더 구체적으로 말하면 이들은 스크립트나 바이트코드이다.

실행 파일들은 이진 파일로 불리며 이는 프로그램의 원시 코드와는 대비되는 용어이다.

실행 가능한 코드(Executable code)는 실행 가능한 명령어들(실행 파일을 구성하는데 꼭 필요하지는 않은)의 단락들로 표현된다. 예를 들면, 프로그램 내의 섹션들이 있다.

 


목적 파일

컴퓨터 과학에서 목적 코드 또는 목적 파일 컴파일러 어셈블러 소스코드 파일을 컴파일 또는 어셈블해서 생성하는 파일이다.

목적 파일들은 기계어나 혹은 이에 준하는 RTL과 같은 이진 코드로 이루어져 있다. 

링커는 여러 개의 목적 파일을 묶어 커널과 연결함으로써 실행 파일을 만들거나, 혹은 라이브러리를 만들어내는 데에 쓰인다.

목적 파일에서 필수적인 요소는 기계어(컴퓨터의 CPU가 직접 실행하는 코드)이다. 

임베디드 시스템을 위한 목적 파일들은 기계어 이외에는 아무것도 포함하고 있지 않다.

그러나 목적 파일들은 또한 링크나 디버그를 위해 런타임 정보, 릴로케이션 정보, 프로그램 심볼의 코드로 사용하는 데이터를 포함하기도 한다.


라이브러리 (컴퓨팅)

라이브러리(library)는 주로 소프트웨어를 개발할  컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다.

여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, , 자료형 사양을 포함할 수 있다. 

OS/360 및 이후 세대에서는 파티션 데이터 세트로 부른다.

 

정적 라이브러리

정적 라이브러리는 컴파일러가 소스 파일을 컴파일할 때 참조되는 프로그램 모듈이다.

즉, 정적 라이브러리(statically-linked library)는 루틴(routine) 외부 함수와 변수들의 집합으로, 컴파일러, 링커, 바인더 등에 의해 목표된 애플리케이션으로 복사되어 오브젝트 파일과 독립적으로 실행할 수 있는 실행 파일을 생성하는데에 사용된다.

윈도의 .LIB파일과 같이 .a의 확장자를 갖고있다.

동적 라이브러리

 

동적 라이브러리는 프로그램 수행 도중 해당 모듈이 필요할 때 불러쓰는 프로그램 모듈이다. 윈도우에서는 주로 DLL 확장자를 가지며, 리눅스에서는 주로 SO 확장자를 가진다.

공유 라이브러리

공유 라이브러리 또는 공유 오브젝트 실행 파일, 더 나아가 공유 오브젝트 파일에 의해 공유될 목적으로 만들어진 파일이다.

 


코어 덤프

컴퓨팅에서, 코어 덤프(core dump), 메모리 덤프(memory dump), 또는 시스템 덤프(system dump)는 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것으로, 보통 프로그램이 비정상적으로 종료했을 때 만들어진다.

실제로는, 그 외에 중요한 프로그램 상태도 같이 기록되곤 하는데, 프로그램 카운터, 스택 포인터 등 CPU 레지스터나, 메모리 관리 정보, 그 외 프로세서 및 운영 체제 플래그 및 정보 등이 포함된다.

코어 덤프는 프로그램 오류 진단과 디버깅에 쓰인다.

이 명칭은 1950년대부터 1970년대 랜덤 액세스 메모리로 주로 쓰던 자기 코어 메모리에서 유래했다.

자기 코어 기술은 더 이상 쓰이지 않지만 그 명칭은 계속 쓰이고 있는 것이다.

많은 운영 체제는 프로그램에 치명적인 오류가 일어나면 자동으로 코어 덤프를 실행시키는데, 이를 "코어를 덤프한다"고 한다.

이 말의 의미가 확장되어, 많은 경우에 프로그램 메모리의 기록이 발생하는지 여부에 관계없이 생기는 치명적인 오류를 의미하게 되었다.


샌드박스 (컴퓨터 보안)

위키백과, 우리 모두의 백과사전.

샌드박스(sandbox)란 외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태이다.

호스트 머신이나 운영 체제에 손상을 입히지 않고 확인되지 않거나 신뢰할 수 없는 서드파티, 공급자, 사용자, 웹사이트로부터 잠재적으로 테스트되지 않거나 신뢰하지 못하는 프로그램이나 코드를 실행하기 위해 종종 사용된다.

고도로 제어되는 환경을 제공한다는 측면에서 샌드박스는 가상화의 특정 예시로 간주할 수 있다. 샌드박스는 소프트웨어가 호스트 장치에 위험을 주지 않게 하면서 바이러스나 기타 악성 코드를 포함할 수 있는 미검증된 프로그램을 테스트하기 위해 종종 사용된다.

자바의 샌드박스

  • 자바(Java)가 지원하는 기본 보안 소프트웨어로, 1996년 1월 발표된 JDK(Java development kit:자바개발도구)1.0부터 제공되고 있다.
  • 외부에서 받은 프로그램을 JVM(Java Virtual Machine)이라는 보호된 영역 안에 가둔 뒤 작동시키는 방법으로 프로그램의 폭주나 악성 바이러스의 침투를 막는다.
  • 자바가 제공하는 샌드박스는 네트워크를 통해 전송받은 애플릿의 시스템 자원에 대한 접근을 제한한다.
  • 샌드박스에서 접근을 허용한 애플릿은 작업이 가능하지만 그렇지 않은 경우는 로컬파일을 읽거나 바꿀 수 없게 하는 방법으로 시스템의 피해를 방지한다.
  • 샌드박스는 클래스 로더(class loader), 바이트코드 검사기(bytecode verifier), 보안관리자(security manager)의 콤포넌트로 구성된다. 각 콤포넌트는 시스템의 신뢰성을 유지하는 역할을 한다.

일반적 의미

  • 샌드박스는 실험적 의미의 프로그램을 연결하는 곳을 지칭하기도 한다. 따라서, 실제 적용 이전에 먼저 샌드박스로 연결하여 테스트하라는 것은 작동은 실제와 같으나 금융상 또는 법률상의 실제행위는 일어나지 않는 것을 뜻한다.
  • 모의 테스트라는 의미이다.

 


침입 탐지 시스템

침입 탐지 시스템(Intrusion Detection System, IDS)은 일반적으로 시스템에 대한 원치 않는 조작을 탐지하여 준다.

IDS는 매우 많은 종류들이 존재하며, 여기서는 그들 중 일부를 설명한다.

시스템에 대한 원치 않는 조작은 악의를 가진 숙련된 해커 또는 자동화된 툴을 사용하는 스크립트 키디에 의한 공격의 형태로 행해질 수 있다.

침입 탐지 시스템은 전통적인 방화벽이 탐지할 수 없는 모든 종류의 악의적인 네트워크 트래픽 및 컴퓨터 사용을 탐지하기 위해 필요하다. 이것은 취약한 서비스에 대한 네트워크 공격과 애플리케이션에서의 데이터 처리 공격(data driven attack), 그리고 권한 확대(privilege escalation) 및 침입자 로그인 / 침입자에 의한 주요 파일 접근 / 악성 소프트웨어(컴퓨터 바이러스, 트로이 목마, 웜)와 같은 호스트 기반 공격을 포함한다.

IDS는 여러 개의 구성 요소로 이루어져 있다: 센서는 보안 이벤트를 발생시키며, 콘솔은 이벤트를 모니터하고 센서를 제어하거나 경계시키며(alert), 중앙 엔진은 센서에 의해 기록된 이벤트를 데이터베이스에 기록하거나, 시스템 규칙을 사용하여 수신된 보안 이벤트로부터 경고를 생성한다.

IDS를 분류하는 방법은 센서의 종류와 위치 그리고 엔진이 경고를 만드는 데 사용하는 방법론 등에 따라 여러가지가 있다. 많은 간단한 IDS들은 위의 세 가지 요소들을 하나의 장치 또는 설비로 구현하고 있다.

 

악용 탐지 대 비정상 탐지

시그니처 기반 침입 탐지 시스템으로도 알려진 악용 탐지 시스템(misuse detection system)은 악의적인 것으로 추정되는 트래픽 또는 애플리케이션 데이터의 패턴을 감시하여 침입을 식별한다.

이러한 종류의 시스템은 오직 '알려진' 공격만 탐지할 수 있다고 여겨진다.

그러나 그들의 규칙 집합에 따라, 시그니처 기반 IDS들은 때때로 알려진 공격들과 서로 특징을 공유하는 (예를 들어 HTTP GET 요청을 통한 'cmd.exe' 접근과 같은) 새로운 공격들을 탐지할 수 있다.

IDS는 채집된 정보를 분석하여, 공격 시그니처를 저장하는 거대한 데이터베이스를 통해 그것을 비교한다.

IDS는 본질적으로 이미 문서화된(알려진) 특정 공격을 찾는 것이다.

바이러스 탐지 시스템에서처럼, 악용 탐지 소프트웨어는 단지 패킷을 비교하기 위해 사용되는 공격 시그니처 데이터베이스나 마찬가지이다.

변칙 기반 침입 탐지 시스템(anomaly based intrusion detection system)은 네트워크 또는 호스트의 일반적인 동작과 다른것으로 추정되는 트래픽 또는 애플리케이션 컨텐트를 시스템 운영자에게 알리는 것으로 침입을 식별한다.

변칙 기반 IDS는 일반적으로 이것을 스스로 학습하여 이룬다.

변칙 탐지에서, 시스템 관리자는 네트워크의 트래픽 로드, 고장(breakdown), 프로토콜, 그리고 일반적인 패킷 크기에 대한 기준선 또는 일반 상태를 정의한다.

변칙 탐지자(anomaly detector)는 네트워크 세그먼트를 모니터하여 정의된 기준과 그들의 상태를 비교하고 변칙을 찾는다.

 

네트워크 기반 시스템 대 호스트 기반 시스템

네트워크 기반 시스템(또는 NIDS)에서 센서는 모니터할 네트워크 또는 종종 DMZ나 네트워크 경계의 초크 지점(choke point)에 위치한다. 센서는 악의적 트래픽 탐지를 위해 모든 네트워크 트래픽의 흐름을 캡처하여 각각의 패킷 내용을 분석한다. 호스트 기반 시스템에서 센서는 보통 그것이 설치된 호스트의 모든 활동을 감시하는 소프트웨어 에이전트로 구성된다. 이 두가지 형식이 혼합된 하이브리드 시스템 역시 존재한다.

  • 네트워크 침입 탐지 시스템은 네트워크 트래픽을 검사하고 여러 호스트들을 모니터하여 침입을 식별하는 독립된 플랫폼이다. 네트워크 침임 탐지 시스템은 포트 미러링 또는 네트워크 탭(network tap)을 위해 설정된 허브, 네트워크 스위치에 연결하여 네트워크 트래픽에 접근한다.
  • 호스트 기반 침입 탐지 시스템은 호스트에서 시스템 콜, 애플리케이션 로그, 파일 시스템의 수정사항(이진 파일, 패스워드 파일, capability/acl 데이터베이스) 그리고 호스트의 동작과 상태등을 분석하여 침입을 식별하는 에이전트로 구성된다.
  • 하이브리드 침입 탐지 시스템은 위의 두가지 방식을 결합한 것이다. 호스트 에이젼트 데이터는 네트워크의 종합적인 관점을 위해 네트워크 정보와 결합된다. 하이브리드 IDS 중 하나로 Prelude가 있다.

수동적 시스템 대 반응적 시스템

수동적 시스템에서의 IDS 센서는 가능성 있는 보안 침해 사항을 탐지하여, 정보를 로그로 기록하고 콘솔을 통해 경고 신호를 보낸다. 반응적 시스템에서의 IDS 센서는 의심스러운 동작에 대해 자율적으로 또는 시스템 운영자에 의해 사용자를 로그 오프 시키거나, 방화벽을 다시 프로그래밍하여 의심스러운 악의적 출처로부터 네트워크 트래픽을 차단하도록 응수한다.

비록 둘다 네트워크 보안과 관련되지만, IDS는 침입 발생 자체를 막기 위한 방화벽과는 다르다. 방화벽은 침입을 막기 위해 네트워크 사이의 접근을 제한하며, 네트워크 내에서의 공격에 대한 신호를 보내지 않는다(does not signal an attack from inside the network). 반면에 IDS는 일단 의심스러운 침입이 발생하면 그것을 평가하고 경보 신호를 보낸다. IDS는 또한 현 시스템 내부에서 발생한 공격에 대해서도 감시한다.

이것은 전통적으로 네트워크 통신을 검사하고, 일반적인 컴퓨터 공격에 대한 휴리스틱과 (시그니처로도 알려진) 패턴을 식별하며, 시스템 운영자에게 경고하기 위한 동작을 취하는 것으로 성취된다. 네트워크 연결을 끝내는 시스템은 침입 차단 시스템이라 불리며, 이것은 애플리케이션 계층 방화벽의 또 다른 형태이다.

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

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