'공부/보안'에 해당되는 글 35건

운영체제보안 4

공부/보안 2020. 9. 22. 16:18
반응형

Race Conditions


운영체제는 자원관리자이다. 따라서 Thread나 Process가 주요자원들을 공유하게 해준다.

CPU는 하나이고 실행시킬 Task는 여러개일때, 시간을 나누어 번갈아가며 실행한다. (CPU => MIPS 따라서 번갈아가며 사용해도 사용자는 동시에 사용하는 것처럼 보인다.)

두 thread나 process가 공유자원에 동시에 접근하면 발생한다 따라서 임계영역에 한 순간 한 thread만 들어가도록 상호배제를 하거나 순서관계를 주어 한 thread가 다른 thread가 끝날때까지 기다리게 동기화해준다.

상호배제가 되어있지 않은 경우 다른 일을 하기 전에 공격자가 끼어들 수 있다.

Logging


log : 일지를 남기다.

시스템에 대해 기록하여 문제점, 침입자 등을 찾아낼 수 있다.
문제를 파악해서 대응할 수 있게해준다.

모든 것을 log할 수 없고, privacy risk와 process가능한 data만 log하는 것이 좋다.
하지만, 반드시 보안적으로 중요한 이벤트들은 log하여야한다.

linux에서 /var/log 아래에 log 파일들이 있다.

log viwer로는 last command가 있다.
tail = 최근 저장된 log 10줄을 보여준다.

Intruders & Security Design


Intruders = Attackers = Crackers = Black hat hackers = 침입자

  • Masquerader : 신분위장자, 내부의 적법한 사용자의 계정을 도용하여 비인가적인 침입을 함 (outsider)
  • Misfeasor : 적법한 사용자, 더 많은 권한을 가지고 불법행위를 함 (insider)
  • Clandestine user : 은밀한 사용자, 백도어 드으로 log를 남기지 않거나 log를 지움 (insider or outsider)

Layers of A computer system, Security


==========================
| Application |
| Services(compiler, DB..|
| OS |
| Hardware |
=======================

      Application security
     ============
     Network Security
   ================ 
      OS Security
 =====================
     User Security

=========================
Physical Security
============================
=> 위층의 보안이 좋아도 아래층 보안이 약하면 취약

Protection and Security Desing Principles


  • 최소한의 권한 (Least privilege).
    각 사용자와 프로그램은 가능한 최소한의 권한을 사용하여 작동해야 한다. 이 원리는 사고, 에러 또는 공격으로부터의 손상을 제한하며 또한 권한을 갖는 프로그램간의 잠재적인 상호작용의 수를 저하시는데 따라서 의도되지 않은, 원하지 않은 또는 부적절한 권한 사용이 덜 일어나게 할 것이다. 이 개념은 프로그램의 내부로 확장될 수 있는데 이러한 권한을 필요로하는 프로그램의 가장 작은 부분만이 이러한 권한을 가져야 한다.

 

  • 메카니즘의 효율적 사용/단순 (Economy of mechanism/Simplicity).
    보호 시스템 설계는 가능한 단순하고 작아야 한다. 이들은 "소프트웨어의 라인별 검사 및 보호 메카니즘을 구현하는 하드웨어의 물리적 조사와 같은 기법들이 필요하다. 이러한 기법이 성공적이기 위해서는 작고 단순한 설계가 절대적으로 필요하다" 라고 논의하고 있다. 이는 때때로 "KISS ("keep it simple, stupid")" 라고 기술된다.

 

  • 오픈 설계 (Open design). 보호 메카니즘은 공격자의 무지에 의존하지 않아야 한다.
    대신 메카니즘은 패스워드 또는 비밀키와 같은 비교적 소수 (쉽게 변경될 수있는) 아이템의 기밀성에 의존하며 공개적이여야 한다. 오픈 설계는 상세한 공개적 조사를 가능하게 하며 또한 사용자 자신이 사용하고 있는 시스템이 합당함을 깨닫게 할 수 있다. 솔직히 널리 배포되어 있는 시스템에 대해 기밀을 유지하려고 하는 것은 현실적이지 않다; 디컴파일러와 파괴된 하드웨어는 구현시의 어떤 비밀을 재빨리 드러낼 수 있다. Bruce Schneier 은 스마트 엔지니어는 소스 코드가 폭넓은 검토를 받았으며 모든 확인된 문제가 수정되었음을 보장해야 할뿐만 아니라 보안과 관련된 모든 것에 대해 오픈 소스 코드를 요구해야 한다고 주장하고 있다

 

  • 완벽한 조정 (Complete mediation).
    모든 접근 시도가 검사되어야 하는데 메카니즘이 파괴될 수 없도록 이를 위치시켜라. 예를 들어 클라이언트-서버 모델에서 일반적으로 서버는 사용자가 자신의 클라이언트를 구축 또는 수정할 수 있기 때문에 모든 접근 검사를 해야 한다.

 

  • 고장 안전 디폴트 (Fail-safe defaults (예, 허가권 기반 접근 방법).
    디폴트는 서비스 부인이어야 하며 보호 체계가 접근이 허가되는 조건을 확인해야 한다.

 

  • 권한 분리 (Separation of privilege).
    원칙적으로 객체에 대한 접근은 한가지 이상의 조건에 의존해야 하며 따라서 한가지 보호 시스템을 무너뜨려도 완전한 접근을 할 수 없을 것이다.

 

  • 최소한의 공통 메카니즘 (Least common mechanism).
    공유 메카니즘 (예, /tmp 또는 /var/tmp 디렉토리 사용) 의 수와 그 사용을 최소화해라. 공유 객체는 정보 흐름 및 의도되지 않은 상호작용에 대해 잠재적으로 위험한 채널을 제공한다.

 

  • 심리학적 수용성/사용의 편리함 (Psychological acceptability/Easy to use).
    휴먼 인터페이스는 사용하기 쉽도록 설계되어야 하며 따라서 사용자는 일상적 및 자동적으로 보호 메카니즘을 정확히 사용할 것이다. 보안 메카니즘이 사용자가 보호하려는 목적의 정신적 이미지와 밀접하게 일치된다면 실수는 줄어들 것이다.

 

Set- UID Privilieged Programs


Need for Privilieged Programs

예를 들어 /etc/shadow 파일의 권한을 보면

-rw-r----- 1 root shadow 1443

~


=> 오직 오너만이 write할 수 있다.

하지만 일반 유저들이 그들의 비밀번호를 바꿀때 어떻게 바꿀 수 있을까? 특권 프로그램을 이용해서 바꾼다

일반적으로 운영체제 내에서 세부적으로 접근 제어를 하는 것은 굉장히 복잡하다.
rwx 3가지 권한을 세부적으로 할 경우 write를 1. 앞에 2. 중간에 3. 뒤에 와 같이 3가지로 나눌 수 있다. 하지만 복잡해진다.

따라서 rwx + 3bits 총 12비트로 permission을 나타낸다.
(확장, fine-grained access control을 위해 3bits를 추가한다.)

일반적으로 OS가 제공하는 접근제어를 바로 사용가능하지만 (e.g system call)
특별한 경우(e.g root가 가진 파일 수정)는 특권 프로그램이 필요하다! => setUID가 설정된 프로그램이 필요하다! 혹은 daemons
(관리자(super user)를 믿는다고 가정한다. 일반 사용자들은 특권 프로그램을 이용해서 바꿀 수 있다)

 

Different Type of Privileged Programs

  1. Daemons in Linux (MS Windows 에서는 services)
    백그라운드에서 계속 수행된다. 따라서 키보드로 부터 입력을 받을 수 없다.
    root나 특권을 가진 유저의 권한으로 실행해야한다.
    • 만약 daemon에게 요청을 하고 요청이 타당하면 daemon이 수행한다.
      (특히 Network는 Service를 위해 daemon들을 많이 사용한다.
      ps - af, ef, af 등을 통하여 모든 프로세스들을 보면 d로 끝나는 것들이 있다.
      Network daemon을 뜻한다. => 중요한 일을 하므로 root의 권한을 주던지 어떤 특권이 있는 사용자의 권한으로 돌아간다.
      중요한 일을 하므로 daemon을 임의로 만들지 못한다.
  2. Set-UID Programs
    Unix 시스템에서 사용된다.
    특정한 비트가 표시되어있는 프로그램이다.

 

Set-UID Concept

  • superman story
    1. Power suit 1.0
      Super man은 자신의 권한을 superpeople
728x90
반응형

'공부 > 보안' 카테고리의 다른 글

Buffer Overflow Attacks 1  (0) 2020.10.16
set-UID Privileged programs  (0) 2020.10.15
운영체제보안 3  (0) 2020.09.16
운영체제 보안 2  (0) 2020.09.10
운영체제 보안 1  (0) 2020.09.10
블로그 이미지

아상관없어

,

운영체제보안 3

공부/보안 2020. 9. 16. 17:44
반응형

User Authentication


  • 사용자 인증
    등록된 사용자를 증명해준다.
    주로 ID/PW
    첫번째 보안 수단이다.
    인증에 기반하여 접근권한을 부여한다.
  • 기기 인증
    client가 server에게 접속할 수 있는 권한을 가진 기기라고 증명해준다.
    따라서, 아무나 server에 접근할 수 없다.
    ex) 인터넷 뱅킹시 특정 기기 등록하는 경우
  • linux에서
  • /etc/passwd
    login:x:userid:groupid:gecos:homedir:shell
  • root:x:0:0:root:/root:/bin/bash
  • /etc/shadow
    login:password:password aging fields
  • root:pB3ijlksa28hdkl93h:13904:0:99999:7:::
    (유저네임)(암호화된 PW)(PW가 언제 변경되었는지 1970.1.1기준)(99999일 안에는 변경해야)(이후에 얼마나 지나야 변경가능?)
  • /etc/groups
    groupname:grouppassword:groupid:secondarymembers
  • daemon:x:2:root,bin,daemon

Password가 X로 표시된 이유는 초창기에는 저 영역에 PW가 있었지만, /etc/shadow 위치로 옮겼고, 암호화된 PW가 저장됨 따라서 아무나 접근 할 수 없음,

Access Control


관리하는 자원이 많다. 따라서 이 자원을 어떻게 접근하고 누가 접근할 것인지 등 설정해주어야함
유저는 주체이고 자원은 객체가 된다.
OS가 해야할 중요한 일 중 하나는 log를 남기는 것이다.(시스템 자원에 대한 유저 접근을 기록한다.)

  • DAC
    Discretionary Access Control : 임의 접근 제어
    But, 문제가 있음 => 바이러스나 멀웨이들이 permission 수정 가능하다.
    공유적인 측면에서는 좋으나, 보안적인 측면에서는 좋지 않음
  • MAC
    Mandatory Access Control : 강제 접근 제어
    악성코드가 permission 수정 불가하다.
    공유적인 측면에서는 좋지 않으나, 보안적인 측면에서는 좋음
  • Priviledged Users
  • Root와 Normal의 차이?
  • root : 권한을 가진 사용자(root만이 쓸 수 있는 명령어 따로 있음)

User mode <-> Kernel mode
특권 명령어 X 특별한 권한이 있는 명령어 사용가능

Normal user <-> Root user
쓸 수 있는 명령어 제한 권한 가짐, DAC 기반
(ex) sudo, 디스크 포맷 X) File 권한 임의 변경 가능, 자원 접근 마음대로 함

Secure OS는 Super user 개념이 없다 why? Super User가 공격자가 되었을때의 보호기법이 없기 때문

File Permissions


  • 읽기 보호 : 기밀성 제공 -> read를 막음으로써 암호화가 필요없어도됨
  • 쓰기 보호 : 무결성 제공 -> write를 막음으로써 무결성 제공
  • 명령어
    id : 현재 로그인한 계정 정보 출력
    touch : 시간 정보 현재로 변경(날짜 정보), 파일이 없을 결우 새 파일 만듦
  • File permission bit는 9bit? -> 12bit이다
  • Directory 권한이 X? 실행이 아니라 디렉토리 접근 권한이다. 디렉토리가 접근 불가능하면 디렉토리 내 파일에 접근이 불가하다.
728x90
반응형

'공부 > 보안' 카테고리의 다른 글

set-UID Privileged programs  (0) 2020.10.15
운영체제보안 4  (0) 2020.09.22
운영체제 보안 2  (0) 2020.09.10
운영체제 보안 1  (0) 2020.09.10
사이버 킬체인 연습(자동차 해킹 예시)  (0) 2020.07.17
블로그 이미지

아상관없어

,
반응형

Interfaces in Linux


user

ㅡㅡㅡㅡ -> User interface

Standard utility programs

(shell, editors, compilers etc) => user mode

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ -> Library interface
Standard libarary
(open, close, read, write, fork etc) => kernel mode
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ -> System call interface
Linux operating system
(process managaement, memory management .. etc)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Hardware
(CPU, memory, disks etc)

  • 일반 APP들은 Library를 통하거나 직접 System call 인터페이스 사용가능
  • System call interface = 운영체제에게 서비스를 요청하는 방식
  • cpu가 커널 영역에 있는 code를 수행하면 커널모드이다.

User, Kernel mode


  • kernel mode
    신뢰되는 운영체제 코드를 프로세서가 실행될 때 모드
    특권명령어/권한을 부여 => 모든 명령어 실행가능 ( 모든 자원 접근 가능)
  • Kernel은 운영체제의 핵심적인 부분으로써 직접 하드웨어와 상화작용함
  • kernel은 부팅이 되면 메모리로 load되고 컴퓨터가 동작하는 동안에는 메모리에 상주 <-> 사용자 프로그램은 실행 할 때만 메모리에 올라감

운영체제의 핵심모듈은 반드시 Kernel모드에서 수행되어야함
잠재적으로 위험(중요)한 코드 이므로 엄격한 인터페스를 통해서만 진입한다.
미리 만들어둔 코드만 정상적으로 돌려야한다.

  • User mode
    사용자 프로그램이나 유틸리티 프로그램이 실행 될때 권한을 제한함
    중요한 하드웨어 자원을 직접 접근하지 못하고 운영체제를 통해서 접근가능함.
  • 언제 애플리케이션이 커널모드로 진입?
  • 예외 발생시 -> 다른 프로세스의 메모리 영역을 침범하거나 0으로 나누거나, int overflow
  • 애플리케이션이 중요한 시스템 서비스를 받고자 할때 ( System call 요청 )
  • 하드웨어 인터럽트
    I/O 장치가 이전에 시킨일을 끝냈을 때 -> cpu가 어느 시점이 되면 입출력 장치에게 일을 내림. 입출력이 완료되기 전에 문맥교환을 하여 다른 일을함. 언젠가는 나중에 디스크에 쓰는 작업 그러면 I/O 인터럽트가 걸림

Exception Processing


  • 운영체제가 어떤 예외인지 파악 = > 따라서 mode가 바뀌어야한다.
  • mode 변경위해 현재 상태를 저장한다
  • 나중에 복구할 수 있는지 확인한다.
  • 복구가 어려우면 해당 프로세스 Kill
  • user 모드에서 예외 발생시 -> kernel mode로
  • kernel 안에서 발생시 -> system down

Interrupt 발생


  • 자기보다 우선순위가 낮은 인터럽트 disable
  • 인터럽트 당한 프로세스 정보 저장
  • 이후 restore

OS Challenge


  • 동시에 여러 사용자 가능, 많은 자원 공유 가능
  • 운영체제는 사용자들을 다른 사용자로 부터 보호해야하고, 프로세스를 다른 프로세스로부터 보호해야한다.

OS's role


  • 내부적 특성
    특권 모드, 메모리 보호, 파일 접근 권한
  • 사용자들로부터 OS 보호
  • 다른 유저들로 부터 사용자 보호

Protection


  • No Protection -> 멀티 태스킹 X, 한 사용자만 한번에
  • Isolation -> 물리적으로 사람마다 다른 컴퓨터 사용하게
  • Share via access limitation -> 물리적 메모리 공유 가능, But 논리적으로 분리
  • Limit user of an object -> 관리자만 접근

Security


허가 되지 않은 객체가 원하지 원하지 않는 행동을 하는 것을 막음

STRIDE


  • Spoofing 위장 -> 인증
  • Tampering 변조 -> 무결성
  • Repudiation 부인 -> 무결성
  • Information Disclosure 정보유출 -> 암호화
  • Denial of Service 서비스거부 -> 가용성
  • Elevation of Privilege 권한상승 -> 권한

OS Protection Principles


  • Separtion
  • physical
  • temporal
  • logical
  • cryptographic
  • memory protection
  • sandbox
728x90
반응형

'공부 > 보안' 카테고리의 다른 글

set-UID Privileged programs  (0) 2020.10.15
운영체제보안 4  (0) 2020.09.22
운영체제보안 3  (0) 2020.09.16
운영체제 보안 1  (0) 2020.09.10
사이버 킬체인 연습(자동차 해킹 예시)  (0) 2020.07.17
블로그 이미지

아상관없어

,
반응형

What is OS?


시스템 소프트웨어로써, H/W, S/W 자원들을 관리해준다. H/W와 APP사이에 있으면서 인터페이스를 제공해준다.
컴퓨터 프로그램들에게 공통적 서비스를 제공해준다.

Fucntion of an OS


  • 공유
    제한된 자원을 가지고 여러사람 또는 여러개의 프로세서, thread가 공유 할 수 있도록 만들어준다.
    즉 효율적으로 사용할 수 있도록 자원을 관리 해준다.
  • 멀티 유저
    하나의 기계(서버, 시스템)을 여러사람이 동시에 사용가능 (80년대 컴퓨터는 이용료를 내고 사용햇음)
    예) 구글, 카카오 서버
  • 멀티 태스킹
    하나의 core에서 여러 프로세스를 번갈아가며 실행 => 병행 수행
  • 멀티 프로세싱
    cpu개수만큼 프로세스가 여러개 돌아감. 멀티 태스킹보다 비용이 많이듬. 코어가 여러개 필요함
  • 멀티 스레딩
    thread : 프로세스 보다 수행단위가 작음 = 프로세스의 일부분
    한 프로세스내에 여러 스레드가 존재함.
    예) 하나의 프로세ㅐ스에 여러 개의 함수가 존재 (여러가지 함수 = 동시에 동작하므로 thread)

cpu 여러개 : 동시
core 하나 : 번갈아 가면서

What is OS & Kernel?


  • 운영체제들은 유저모드, 커널모드 두가지를 지원함
  • 커널은 운영체제에서 핵심적인 부분이다. 시스템에 대한 모든 통제권을 가진다.
  • 중요하므로 메인 메모리에 상주한다 => 자주 쓰이고 빨리 서비스 가능하기 위해
  • 커널 코드는 메모리 영역에서 분리되어 로드된다. => 애플리케이션 프로그램들이나 다른 부분들로부터 보호함
    APP이 H/W 사용시 => 미리 규정이 되어 있는 인터페이스를 통해서 요청한다.(임의접근X)
  • 전반적인 하드웨어를 제어할 수 있는 수준을 제공
    CPU 스케줄링, 문맥교환, IPC, 메모리 관리, 인터럽트 핸들러, 예외 핸들러
    H/W자원직접관리하며, H/W서비스 직접 처리한다.
  • Kernel은 하드웨어와 애플리케이션간 인터페이스이다.

OS Operations


유저 프로그램은 잘못된 명령어(특권 명령어나 존재하지 않는 명령어)나 금지된 메모리 영역에 접근하려 할 수 있다.
그럴 경우 SW Interrrupt가 발생함.

문제 발생시 제어흐름이 운영체제로 넘어가서 에러 메시지를 보냄. 그 당시 상황을 저장하고(디버깅 할 수 있게) 문제 프로그램을 종료한다.

Function of OS


  • Protection
    보호
    주로 내부적 공격
    사용자나 프로세스의 자원 접근을 통제한다.
    고의 or 실수로 접근할 수 없는 자원을 접근하려 할 때
    다른 프로세스와 간섭이 일어날 때 통제 할 수 있게 보장함
  • Security
    보안
    의도적인 공격임
    내부의 인가된 사용자가 권한을 얻으려 할 때
    외부적인 공격자가 의도적인 공격을 할 때

Trusted OS


설계한 기능만을 수행하는가?
설계하지 않는것은 구현 X

728x90
반응형

'공부 > 보안' 카테고리의 다른 글

set-UID Privileged programs  (0) 2020.10.15
운영체제보안 4  (0) 2020.09.22
운영체제보안 3  (0) 2020.09.16
운영체제 보안 2  (0) 2020.09.10
사이버 킬체인 연습(자동차 해킹 예시)  (0) 2020.07.17
블로그 이미지

아상관없어

,
반응형

정찰

최신의 자동차들은 ECU라고 불리는 전자 제어장치를 장착한다. 차량에는 편의 기능을 위하여 장착된 ECU수가 많다.  이들간 통신을 위해 CAN이라는 단일버스 네트워크를 사용한다. CAN은 외부 네트워크에서 적용되는 보안기법에 취약하다. ICT와 융합된 커넥티드 카는 운행 중에도 외부네트워크와 항상 연결이 되어있고, 통신장치를 자동차에 장착할 수 있다. 커넥티드 카는 ECU들로 내부 네트워크를 구성한 자동차, 네트워크 서비스를 제공하는 Portal 그리고 자동차와 Portal을 연결해주는 통신 Link로 이루어져있다. 출고 시 기본 장착되는 통신장치 외에 third-party 통신장치가 추가 장착이 가능하다. 이 통신장치로 정보를 수집하거나 외부에서 원격으로 차를 조종할 수 있다. 운전자들은 스마트폰과 자동차간의 통신을 이용해 다양한 편의기능을 사용한다. 웹기반과 스마트폰 앱 기반 서비스로 자동차와 통신을 할 수 있다. 안드로이드 앱을 사용하는 경우, 역공학과 리패키징의 취약한 문제점이 있다.

이러한 After Market에서 판매되는 H/WS/W의 사용이 가능하다. 자동차 내부 네트워크와 자동차용 정비기기 사이의 통신을 지원하는 마이크로 컨트롤러인, ELM327기반의 무선통신 모듈을 사용하여 스마트폰과 자동차 내부 네트워크를 무선을 연결 할 수 있다. ELM327 제조사는 관련 H/WS/W를 제작할 수 있는 Data Sheet를 제공한다.

 

무기화

CAN의 보안 취약점과 안드로이드 앱의 역공학, 리패키징 취약점, 차량과 스마트폰과의 통신을 이용하여 무기화를 한다.

스마트폰 앱과 자동차간 통신이 가능한 점을 이용하여, 안드로이드 앱을 리패키징하여 악성앱을 제작한다. ADB Shell을 사용하여 정상적인 앱의 APK파일을 획득하고, 획득한 APKDEX(소스 코드를 컴파일한 결과물)파일을 획득한다. DEX파일이 가상머신에서 동작하는 바이트코드의 구조적 특징을 가진다는 점을 이용하여, 원본과 유사한 Java코드와 Smali코드를 얻는다. 분석을 하여 Smali코드에서 악성코드를 추가한다. 그리고 안드로이드 정책상 개발자 스스로 앱에 서명을 하여 배포하므로 임의로 서명을 하여 악성 앱을 배포할 수 있다.

자동차 진단 앱과 통신 모듈 ELM327의 통신을 이용하여, 앱에서 발생하는 통신데이터를 변경한다. 변조된 앱을 사용하여 ECU 강제 제어 데이터프레임을 CAN에 삽입하여, 정비용 CAN ID를 원하는 CAN ID로 변환한다. 모듈 Data Sheet를 참조하여 모듈을 제어할 수 있는 AT Command들을 획득한다. AT Command들을 이용하여 실제 CAN으로 원하는 CAN ID로 변환하여 원하는 데이터를 전송한다. 

CAN은 각 노드 간 통신시 암호화와 인증이 되어있지 않는 취약점이 있다. 앱으로 통신 모듈 ELM327과 블루투스로 통신될 때, Request-Response 메시지를 획득하여 자동차의 상태 정보를 획득한다. Java 기본함수 탐색을 통해 Smali 코드에 자동차 강제제어 코드를 삽입할 곳을 찾는다. 악성 앱에서 필요한 공격 Smali코드를 추출하고 공격 대상 앱에 적용하여 변조한다. 자동차의 상태 정보를 획득한 뒤, 특정 조건일 때, 변조된 앱으로 원래의 Request 메시지 대신 원하는 메시지로 변경하고 차량을 제어한다.

 

유포

자동차 정비 앱의 디자인을 바꿔 새로운 앱이 출시된 것처럼 가장한다. 그리고 가짜 광고를 통해서 자동차 정비 앱이 필요한 사용자들에게 홍보를 한다. 무료로 다운받을 수 있는 링크를 제공하여 사용자의 다운을 유도한다. 초기에는 정상적인 앱처럼 정상 작동을 하다 어느 시점이 지나면 코드가 동작이 되게 하여, 초기 사용자들이 좋은 평점을 남기게 한다. 그 평점을 이용하여 더 많은 사용자들의 다운을 유도한다. 또는 유료앱이 필요한 사용자들을 노린다. 악성 앱을 유명한 유료앱의 디자인으로 바꾸는 등 속이기 위한 위장을 하고, 블랙마켓, 앱에 대한 사전심사, 검사를 하지 않는 앱마켓 등에 뿌리고 사용자들의 다운로드, 설치를 유도한다.

 

악용 및 설치

사용자가 변조된 자동차 정비 앱을 다운로드, 설치 후 변조된 앱으로 자동차와 통신을 한다.

 

명령 및 제어

사용자가 변조된 앱을 다운로드, 설치 후 자동차와 통신을 함으로써, 악성코드가 심어진다. 그 후, 자동차는 사용자의 제어와 상관없이 심겨진 악성코드의 제어대로 움직이게 된다.

 

목적달성

공격자의 코드대로 차를 제어하여, 특정한 시점 또는 즉시, 운전자의 운전 제어를 방해한다.

.

 

 

 

공격 프로세스

사이버킬체인 사이버공격 설명
정찰 정보수집 자동차의 전자 제어장치와 내부 네트워크를 조사하고, 외부에서 접근할 수 있는 수단 등을 조사한다. 취약점이 나올만한 관련 정보도 모두 수집한다.
무기화 공격준비 정보수집 단계에서 수집한 정보들을 활용한다.
통신 모듈 ELM327로 앱, 자동차가 보안이 되지 않은 통신을 한다. CAN의 보안 취약점을 활용하여 자동차 내부 네트워크를 제어한다. 안드로이드 앱의 역공학, 리패키징을 이용하여 악성앱을 만든다. 위 두 취약점을 이용하여 앱으로 자동차 내부 네트워크를 제어하게 설계한다.
유포 유포 악성 앱을 새로운 앱처럼 홍보, 무료 다운로드 링크를 제공한다. 블랙마켓, 앱에 대한 사전 심사, 검사를 하지 않는 앱마켓에 악성앱을 유포한다.
악용 악용 사용자가 악성 앱을 다운로드하고 설치한다.
설치 설치 사용자가 악성 앱으로 자동차와 통신을 하면 ECU 강제 제어 데이터프레임이 CAN에 삽입된다.
명령 및 제어 명령 및 제어 악성 앱에 심어진 코드대로 자동차가 제어된다.
목적 달성 목적달성 특정 시점 혹은 항상, 운전자가 자동차를 제어하지 못하게 하거나 운전을 방해한다.

 

공격방법

정찰 단계에서 자동차의 공격점들을 찾아 무기화 단계에서 다음과 같은 취약점들을 이용하였다. 자동차 OBD-II 단자에는 여러 모듈을 장착할 수 있고 CAN은 추가된 ECU를 식별하지 못하며, 통신 참여를 제어하지 못한다. 정비 모듈을 사용하여 자동차 진단 앱과 통신을 할 수 있다. 안드로이드 역공학, 리패키징을 이용하여 악성 앱을 제작할 수 있다. CAN의 보안은 암호화/인증이 되지 않는다. 이러한 Attack Surface들을 찾아내어, 정상적인 앱을 역공학, 리패키징하여 악성코드를 추가한다. 이렇게 변조를 하여 악성 앱을 제작한다. 그리고 이 악성 앱을 유포, 설치한다.  OBD-II 단자를 통해 통신 모듈을 추가한 뒤, 변조된 악성 앱으로 통신을 한다. AT Command로 원하는 데이터를 전송하여 자동차를 제어한다.

 

방어기법

정상적인 앱을 악성 앱으로 역공학하기 어렵게 한다. 정상적인 자동차 정비 앱을 만들 때, 식별자 변환, 제어 흐름, 암호화 기법, API 은닉 기법을 사용한다. 자동차 정비 앱에서 분석의 대상은 주로 개발상 사용되는 일부 문자열과 함수이기 때문에 위 기법들로 난독화 과정을 한다. 이러한 과정들로 APK의 중요 로직이나 코드, 리소스 등을 보호한다. 무기화 단계의 안드로이드 앱의 취약점을 방어하고, 유포, 악용, 설치 단계를 하지 못하게 하여 결국 명령 및 제어를 막는다. 따라서 목적달성을 실패하게 한다.

ELM327 통신 모듈이 제어 명령으로 정상적인 정비 ID 이외에 원하는 CAN ID의 데이터를 생성할 수 있어 자동차를 강제 제어 할 수 있다. 따라서 ELM327 모듈이 정비용 ID만 사용하도록 설계를 한다. 무기화 단계의 CAN의 보안 취약점을 방어한다. 따라서 설치 단계의 ECU 강제 제어 데이터프레임을 CAN에 삽입하지 못하게 한다.

OBD-II 단자는 여러 통신 모듈을 장착 할 수 있으므로 ELM327외에 다른 모듈이 취약점이 될 가능성이 있다. 따라서 CAN 데이터에 대한 접근제어를 해야한다. 자동차를 정비 중과 주행 중으로 구분을 한다. 정비 중일 경우 모든 CAN ID의 접근제어를 해제하고, 주행 중일 경우 특정 CAN ID데이터만 접근 가능하도록 필터링한다. 무기화 단계의 CAN의 보안 취약점을 방어하여 내부 네트워크에 접근, 제어를 하기 어렵게한다.

 

단계별 방어기법

공격 전 단계 공격시도 단계 공격 후 단계
정찰 무기화 전달 익스플로잇 설치 C&C 행동개시
OBD-II 단자 접근 제어 안드로이드 앱 난독화 정상적인 앱마켓 사용 Threat Emulation Anti-Bot Anti-Bot Anti-Bot
ELM327 Data Sheet 허가된 사용자만 사용 CAN 통신 암호화 Anti-Spam Anti-Virus CAN ID 접근 제어 Endpoint Security Endpoint Security
CAN 통신 암호화 CAN 데이터 접근제어 URL Filtering 인증된 앱만 설치 Intrusion Prevention System
Data Leak Prevention   Mobile Threat Prevention Mobile Threat Prevention
  Threat Emulation Threat Emulation
Threat Extraction Intrusion Prevention System
728x90
반응형

'공부 > 보안' 카테고리의 다른 글

set-UID Privileged programs  (0) 2020.10.15
운영체제보안 4  (0) 2020.09.22
운영체제보안 3  (0) 2020.09.16
운영체제 보안 2  (0) 2020.09.10
운영체제 보안 1  (0) 2020.09.10
블로그 이미지

아상관없어

,