본문 바로가기

System Security/Theory

Chapter 1. Password Cracking

Chapter 1. Password Cracking
1. 암호화(Encryption) & Hash
 - Password를 효과 적으로 숨기는 기술
 - Encryption Algorithm : 평문을 암호화한 결과물을 다시 복호화 가능
 - Hash Algorithm : 평문을 암호화한 결과물을 다시 복호화 불가능
 - Encryption

  · Algorithm의 Key 값에 따라 암호화 결과물이 출력되며 Key를 이용해 복호화 가능하다.
  · Key를 모를 경우 암호문을 유추하기 힘들다.
  · 공개 / 비공개 여부
  ◦ Algorithm : 공개
  ◦ Key : 비공개
 - Hash

  · 단방향 Algoruithm을 사용하며 암호화 결과물을 다시 복호화 할 수 없다.
  · 원본 Data의 길이에 상관없이 출력되는 Data의 길이는 일정하다.
  · Hash 값을 통해 원본 Data의 위·변조를 확인할 수 있다.(원본 Data 무결성 검사)
  · 사용자 인증을 할 때 사용될 수 있다.
  · 문제점
  ◦ 암호 하나당 하나의 Hash 값만 가질 수 있는 것이 아니고 암호 여러 개가 같은 Hash 값을 가질 수 있다.
  ◦ 사용자 계정의 암호가 달라도 Hash 값이 같으면 해당 암호로 인증해 Login이 가능하다
  · Hash Algorithm 종류

Algorithm

개발시기

출력길이

Block Size

Round Num

MD5

1992

128

512

64

SHA-1

1995

160

512

80

TIGER

1995

192

512

56

RIPEMD-128

1996

128

512

128

RIPEMD-160

1996

160

512

160

RIPEMD-256

1996

256

512

128

RIPEMD-320

1996

320

512

160

SHA-256

2002

256

512

64

SHA-384

2002

384

1024

80

SHA-512

2002

512

1024

80

 - 운영체제별 계정 생성 및 인증 절차
  · Linux

  ◦ 계정 생성 명령어

   ▹ 'useradd' 명렁어를 사용해 계정을 생성
  ◦ 계정 정보

   ▹ '/etc/passwd' File에 위와 같은 형식으로 계정 정보 저장

    ※ 자세한 내용은 Linux의 Chapter 4 참고
  ◦ 계정 암호 설정

   ▹ 'passwd' 명렁어를 사용해 계정의 암호를 설정

   ▹ 계정의 암호 정보는 '/etc/shadow'에 저장된다.
  ◦ 계정 암호 정보

   ▹ 계정 이름 이후 정보는 암호화된 계정 암호의 정보로 이루어져 있다.
   ▹ User : 계정 이름
   ▹ Password : 암호
   ▹ Create Date : 계정에 암호가 생성된 날짜
   ▹ PW alter min term : 암호를 변경할 수 있는 최소 기간
   ▹ PW alter max term : 암호를 변경 없이 사용할 수 있는 최대 기간
   ▹ Warning days : 암호 만료일 지정 시 만료 경고가 제공되는 일수
   ▹ Inactive date : Login 접속 차단 일수
   ▹ Expiration date : Login 사용을 금지하는 일 수
   ▹ 암호 구성

    ▸  Hash Algorithm : 사용된 Hash Algorithm(md5 : $1$ / SHA256 : $5$ / SHA512 : $6$)
    ▸  Salt : Hash 값이 첨가되는 값으로 비교인증 시 첨가되어 비교되는 값
    ▸  Result of Hash : Hash Algorithm에 의해 Hash한 Password의 결과 값
    ▸  암호가 없는 경우 '!!'로 표시
  ◦ Linux 암호 인증절차
   ▹ 사용자 계정 정보 입력
    ▸  사용자 계정 이름과 암호 입력
   ▹ Login 계정 이름 확인
    ▸  입력한 계정과 '/etc/passwd'의 File 내용을 비교해 계정 확인
    ▸  정상적으로 등록되어 있는 사용자로 확인되면 다음 인증 수행
    ▸  등록되어 있지 않거나 사용할 수 없는 계정이라면 인승 실패 반환
   ▹ Login 계정 암호 확인
    ▸  입력한 암호 값(문자열)을 해당 Hash Algorithm을 이용해 Hash 값을 생성한다.
    ▸  생성한 Hash 값과 '/etc/shadow' File의 해당 계정의 Hash 값을 비교한다.
    ▸  두 Hash 값을 비교하고 일치 시 인증 성공, 불일치 시 인증 실패
  · Windows
  ◦ Windows 인증 구조

   ▹ Winlogon
    ▸  Windows Login Process의 한 부분
    ▸  사용자의 계정과 암호를 입력 받아 GINA를 통해 LSA로 계정 정보를 넘겨주는 역할
   ▹ GINA(Graphical Identifiacation and Autorization)
    ▸  Winlogon 내에서 'msgina.dll'을 Load시켜 입력 받은 계정과 암호를 LSA에게 전달
   ▹ LSA(Local Security Authority)
    ▸  Local, Remote의 모든 계정의 Login에 대한 검증 및 System Resource 및 File 등에 대한 접근 권한을 검사
    ▸  Winlogon을 통해 전달 받은 계정 정보를 처리해 SAM에 전달
    ▸  NT 보안의 중심 요소로 Security Subsystem이라고 부르기도 한다.
    ▸  기능 
     ▫  이름과 SID를 Matching
     ▫  SRM(Security Reference Monitor)이 생성한 감사 Log 기록
   ▹ SAM(Security Accounts Manager)
    ▸  사용자/Group 계정 정보에 대한 Database를 관리
    ▸  사용자의 Login 입력 정보와 SAM Database 정보를 비교해 인증 여부를 결정
    ▸  편집기로는 읽기조차도 불가능
    ▸  Linux System에서 보자면 '/etc/passwd', '/etc/shadow'를 합쳐놓은 것과 같다.
    ▸  경로 : C:\windows\system32\config\sam
   ▹ SRM(Security Reference Monitor)
    ▸  사용자의 고유 SID를 부여
    ▸  SID에 기반하여 File이나 Directory에 접근 제어를 하게 되고 이에 대한 감사 Message 생성
    ▸  SID 구조

     ▫  Operating System : 해당 System의 종류를 의미하며 'S - 1'은 Windows System을 의미
     ▫  System Type : 단독 System인지 Domain Controler인지 의미
     ▫  System Number : System의 고유 숫자이며 System 설치 시 해당 System의 특성을 수집하여 생성
     ▫  UID : 각 사용자별 숫자로 표현되는 ID(Admin : 500 / Guest : 501 / User ; 1000 이상)
 - Local 인증 구조

  · 계정 정보입력
  ◦ Winlogon 화면에서 계정 정보 입력
  · LSA 인증
  ◦ LSA Sub System이 인증 정보를 받아 NTLM Module에 계정 인증 정보를 전달
  · NTLM Module 인증
  ◦ NTLM이 SAM에 계정 인증 정보를 전달
  · Login
  ◦ SAM에 의해 계정 정보 확인 후 Login
 - Domain 인증 구조

  · Domain 인증에서 운영체제 인증과 같이 높은 수준의 인증이 필요한 경우에 사용된다.
  · Local 인증 방식처럼 단순하게 되면 공격에 매우 취약해 Challenge & Response 방식으로 인증을 수용하며 이방식의 인증 Protocol은 기본 구조가 같다.
  · 인증 구조
  ◦ 인증 요청
   ▹ 인증을 수행하고자하는 주체(Client)가 인증 Server에 인증 요청
  ◦ Challenge 값 생성 및 전송
   ▹ 요청 받은 인증 Server는 문자열 등의 값을 특정 규칙에 따르거나 무작위(Random)로 Challenge 값 생성
   ▹ 인증 요구자(Client)에게 해당 값을 전달
  ◦ Response 값 생성 및 전송
   ▹ 인증 요구자(Client)는 Server에서 전달 받은 Challenge 값과 본인이 입력한 암호 정보 등을 이용해 Server에 Response 값을 생성 후 Server에 전송
   ▹ 대부분의 Protocol이 Response 값을 생성하는 논리(Logic)에서 차이가 난다.
  ◦ Response 값 확인 후 인증
   ▹ 받은 Response 값을 확인해 인증 요구자(Client)가 적절한 암호를 소유하고 있는지 확인한 후 Response가 적절하면 인증의 성공 여부를 인증 요구자(Client)에 알린다.

 

2. Password Cracking
 - 공격 대상의 암호를 알아내기 위해 사용되는 공격 기법이다.
 - ID를 알고 있다는 전제 하에 사용가능한 공격 기법이다.
 - 난이도는 낮지만 가장 강력한 공격 중 하나이다.
 - Password Cracking 종류
  · 사전 대입 공격(Dictionary Attack)

  ◦ 암호로 사용할 만한 것을 사전으로 만들어 놓고 이를 하나씩 대입하여 암호 일치 여부를 확인하는 공격이다.
  ◦ 공격 대상의 개인 정보를 충분히 알고 있을 때 효율적인 공격 방법이다.
  ◦ 악성 코드로 인해 유출된 암호를 기반으로 만들어 지는 경우가 많다.
  · 무작위 대입 공격(Brute Force Attack)
  ◦ 암호로 사용될 수 있는 문자열의 범위를 정하고 범위 내에서 생성 가능한 모든 암호를 생성해 암호를 입력해보는 공격이다.
  ◦ 사전 대입 공격에서 실패했을 때 주로 사용된다.
  ◦ 암호가 단순하고 짧을 경우 단시간에 Cracking된 암호를 알아낼 수 있지만 크고 복잡한 경우 오랜 시간이 걸린다.
  · 레인보우 테이블을 이용한 공격(Rainbow Attack)
  ◦ Rainbow Table을 이용하는 공격이다.
  ◦ Rainbow Table
   ▹ 하나의 암호에서 시작해 특정한 변이 함수로 변이도니 형태의 여러 Password를 생성하여 변이된 각 암호의 Hash를 고리처럼 연결하여 일정 수의 암호와 Hash로 이루어진 연결고리를 무수히 만들어 놓은 Table
   ▹ 암호의 자리 수가 많으면 많을수록 생성하는 시간은 오래 걸리며 용량도 커진다.
   ▹ 용량이 커지면 커질수록 Cracking 성공 확률이 높아진다.
  ◦ Rainbow Attack은 Rainbow Table을 생성 시 용량이 크고 시간이 오래 걸린다는 단점이 있지만 일단 생성해놓았다면 Cracking 시간은 비약적으로 줄어든다.
  · 사회 공학적 기법을 이용한 공격(Guessing Attack)
  ◦ 심리와 행동양식을 교묘하게 이용하는 공격 기법
  ◦ 사용자의 정보 및 주변인의 정보를 이용해 암호를 유추하는 방법을 예로 들 수 있다.
 - 대표적인 Cracking Tool
  · Linux
  ◦ John The Ripper
  · Windows
  ◦ Cain & Abel
  ◦ Winrten

 

3. Windows의 Structure of Password
 - LM

  · Windows에서 가장 약한 인증 방법
  · Windows 95, 98, Me에서 사용되었고 LAN에서 File을 공유하기 위해 사용하는 인증방법이다
  · LM Algorithm으로 만들어진 암호는 아무리 복잡해도 Cracking하는데 10여초 이상이 걸리지 않는 구조이다.
  · LM Algorithm은 대소문자를 구분하지 않으며 대문자만을 사용한다.
  · 최대 14문자의 암호로 구성된다.
  · LM Algorithm은 14자리의 암호를 두 개의 Block으로 분할해 암호화하기 때문에 7자리의 암호와 8자리 이상의 암호의 강도가 같다.
  · LM Hash Algorithm
  ◦ 대문자변환 : 입력받은 암호를 모두 대문자로 치환한다.
  ◦ Padding : 14문자가 안 되는 암호를 모두 14자리로 만들기 위해 0을 채워 넣는 작업
  ◦ 분리 : 14자리의 문자로 구성된 암호를 7자리 Block 2개로 분리한다.
  ◦ DES 암호화 : 분리된 암호를 정해진 Key를 이용해 Hash 값으로 만든다.
  ◦ 결합 : Hash 값으로 만든 두 개의 Block을 결합해 'SAM' File에 저장한다.
  ◦ LM 인증 Response 전송 : 인증시 Response 값으로 전송한다.
 - NTLM
  · LM Hash에서 MD4 Hash와 분리 시 3개의 Block으로 분할하는 기능을 추가한 Algorithm
  · LM Algorithm보다는 안전하지만 크게 차이가 없어 취약하다.
 - NTLM v2
  · Windows Vstar 이후의 Windows System에서 사용되는 기본 인증 Protocol
  · LM/NTLM과는 전혀 다른 Algorithm으로 Hash값을 생성하며 수집되는 정보가 여러 가지이기 때문에 Cracking 하기 쉽지 않은 Algorithm이다.

 

4. Password Recovery
 - 운영 체제를 사용할 경우 관리자의 암호를 분실하는 경우가 생겼을 때 사용하는 암호를 복구하는 방법이다.
 - 관리자 측면에서는 유용하지만 Hacker의 입장에서는 암호를 Cracking하기 좋은 방법 중 하나로 주의해야 한다.
 - Linux
  · 관리자의 암호를 분실 시 복구
  ◦ Root의 Password를 변경하기 위해서는 Single Boot Mode로 변경해 '/etc/passwd'의 내용을 변경해야한다.
  ◦ 복구 방법

   ▹ Boot 화면에서 'Enter'를 누른다.

   ▹ 선택한 OS에서 'e'를 누른다.

   ▹ kernel을 선택해 'e'를 누른다.

   ▹ 마지막에 'single'을 작성 후 'Enter' Button을 누른다.

   ▹ 'b' Button을 눌러 Single Boot Mode로 Reboot한다.

   ▹ 'passwd' 명령어를 이용해 Password를 변경 후 Reboot한다.
  · Grub Password 설정
  ◦ Single Boot Mode가 악용될 수 있는 점을 고려해 Grub에 암호를 설정해 보안하는 방법이다.
  ◦ 설정 방법

   ▹ 'grub' 명령어 입력

   ▹ 'md5crypt'를 입력 후 password를 작성 후 암호화된 값을 복사한다.

   ▹ VI Editor를 이용해 '/etc/grub.conf'(Centos 6.5 이상 : /boot/grub/grub.conf/)를 수정한다.
   ▹ 주석을 제외한 문서의 가장 처음에 'password --md5 [Encrypted Password]'를 작성하면 Single Boot Mode를 Boot 시 암호를 묻는다.
   ▹ 주석을 제외한 문서의 가장 마지막에 'password --md5 [Encrypted Password]'를 작성하면 일반 Boot 시 암호를 묻는다.
  · Grub 암호 분실 시 복구
  ◦ 'CentOS-LiveDVD.iso' 이용해 Boot
   ▹ 'CentOS-LiveDVD.iso' Image를 삽입한다.
   ▹ BIOS에서 Boot 순서가 CD를 가장 먼저 놓고 Boot한다.

   ▹ 'Boot'를 선택한다.

   ▹ Boot된 CentOS Live에서 Terminal을 실행하면 'bash' Shell이 실행되어 Root의 암호를 수정할 수 있다.

   ▹ 'passwd' 명령어를 이용해 암호를 바꾼다.
 - Windows
  · Windows에서는 사용자 인증 정보가 들어있는 'SAM' File에 접근할 수 없기 때문에 Tool을 이용해야한다.
  · 도구 : ERD Commander
  · 복구 방법
  ◦ ERD Commander CD를 이용해 System을 Boot
   ▹ 'ERD Commander' Image를 삽입한다.
   ▹ BIOS에서 Boot 순서가 CD를 가장 먼저 놓고 Boot한다.

   ▹ OS 목록에서 해당되는 OS를 선택한다.

   ▹ Start → System Tool → Locksmith 선택

   ▹ 관리자의 암호를 변경한다.

 

'System Security > Theory' 카테고리의 다른 글

Chapter 6. BOF(Buffer OverFlow) II  (0) 2015.08.18
Chapter 5. BOF(Buffer OverFlow) I  (0) 2015.08.18
Chapter 4. Malware II  (0) 2015.08.18
​Chapter 3. Malware I  (0) 2015.08.18
Chapter 2. System Security Setting  (0) 2015.08.18