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 |