[실습] ccrypt CMD 이용한 파일 암호화/복호화(AES)
사용 시스템
칼리리눅스(KaliLinux)
ccrypt 명령어 기본 사용법
(암호화)
# ccrypt file1.txt (# ccrypt -e file1.txt)
file1.txt.cpt
(확 인)
# ccrypt -c file1.txt.cpt
(복호화)
# ccrypt -d file1.txt.cpt
① ccrypt 패키지 설치
# apt-get update (# apt update)
# apt-cache search ccrypt (# apt list ccrypt, # apt search ccrypt)
# apt-get -y install ccrypt (# apt -y install ccrypt)
② ccrypt 사용법 확인
ccrypt 명령어의 옵션을 확인한다.
# ccrypt --help
③ 실습 준비
# mkdir -p /test
# cd /test
# rm -rf /test/*
# cp /etc/hosts file1.txt
# ls
file1.txt |
# cat file1.txt
127.0.0.1 localhost 127.0.1.1 kali2.example.com kali2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
# file file1.txt
file1.txt: ASCII text |
* file CMD
* binwalk CMD
* strings CMD
* vi 편집기(:%!xxd :%!xxd -r)
④ 파일 암호화(EX: AES) 및 확인
# ccrypt file1.txt
Enter encryption key: (soldesk1.) Enter encryption key: (repeat) (soldesk1.) |
# ls
file1.txt.cpt |
# file file1.txt.cpt
file1.txt.cpt: data |
# cat file1.txt.cpt
-> 출력 내용 생략
⑤ 파일 복호화 및 확인
# ccrypt -c file1.txt.cpt
Enter decryption key: (soldesk1.) 127.0.0.1 localhost 127.0.1.1 kali2.example.com kali2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
-> 암호: soldesk
# ls
file1.txt.cpt |
# ccrypt -d file1.txt.cpt
Enter decryption key: (soldesk1.) |
-> 암호: soldesk
# ls
file1.txt |
# cat file1.txt
-> 출력 내용 생략
[실습] ccrypt CMD 이용한 일반 사용자 간의 암호화 파일 사용
사용 시스템
칼리리눅스(KaliLinux)
파일 암호화 명령어
(Unix) crypt CMD -> (Unix/Linux) ccrypt CMD
(사전 준비 사항)
user01, user02 사용자가 필요
# grep user0 /etc/passwd
# useradd -m -s /bin/bash user01
# passwd user01
# useradd -m -s /bin/bash user02
# passwd user02
① 준비 작업
# rm -rf /test/*
# chmod 777 /test /* 테스트 퍼미션 */
# systemctl restart ssh
# systemctl status ssh
-> active (running)
② user01 사용자가 파일 암호화
[TERM1] user01 사용자 터미널
# ssh user01@localhost
$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01) |
$ pwd
/home/user01 |
$ cd /test
$ cp /etc/hosts file1.txt
$ ls -l
-rw-r--r-- 1 user01 user01 203 2월 5 01:00 file1.txt |
$ ccrypt file1.txt
Enter encryption key: (soldesk1.) Enter encryption key: (repeat) (soldesk1.) |
③ user02 사용자가 암호화된 파일 테스트
[TERM2] user02 사용자 터미널
# ssh user02@localhost
$ id
uid=1002(user02) gid=1002(user02) groups=1002(user02) |
$ pwd
/home/user02 |
$ cd /test
$ file file1.txt.cpt
file1.txt.cpt: data |
$ cat file1.txt.cpt
-> 암호화되있음
$ ccrypt -c file1.txt.cpt
Enter decryption key: (soldesk1.) 127.0.0.1 localhost 127.0.1.1 kali2.example.com kali2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
-> 정상적으로 확인 가능
$ ccrypt -d file1.txt.cpt
Enter decryption key: (soldesk1.) ccrypt: file1.txt.cpt: 허가 거부 |
-> Permission denied
$ ccrypt -c file1.txt.cpt > file2.txt
$ ls
file1.txt.cpt file2.txt |
$ cat file2.txt
127.0.0.1 localhost 127.0.1.1 kali2.example.com kali2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
[실습] ccrypt CMD 이용한 디렉토리 안에 들어 있는 파일들에 대한 암호화
사용시스템
kali
① user01 사용자가 실습을 위한 준비
[TERM1] user01 사용자 터미널
$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01) |
$ pwd
/test |
$ cd /test
$ mkdir -m 777 dir1
$ mkdir -m 777 dir1/dir2
$ mkdir -m 777 dir1/dir2/dir3
$ cp /etc/hosts dir1
$ cp /etc/hosts dir1/dir2
$ cp /etc/hosts dir1/dir2/dir3
$ tree -C (# apt-get -y install tree)
. ├── dir1 │ ├── dir2 │ │ ├── dir3 │ │ │ └── hosts │ │ └── hosts │ └── hosts ├── file1.txt.cpt └── file2.txt 3 directories, 5 files |
② user01 사용자가 dir1 디렉토리 안의 모든 파일들을 암호화
$ ccrypt -r dir1
Enter encryption key: (soldesk1.) Enter encryption key: (repeat) (soldesk1.) |
$ tree -C -F
. ├── dir1/ │ ├── dir2/ │ │ ├── dir3/ │ │ │ └── hosts.cpt │ │ └── hosts.cpt │ └── hosts.cpt ├── file1.txt.cpt └── file2.txt 3 directories, 5 files |
③ user02 사용자가 user01 사용자가 만든 dir1 디렉토리 안의 파일들 테스트
[TERM2] user02 사용자 터미널
$ id
uid=1002(user02) gid=1002(user02) groups=1002(user02) |
$ pwd
/test |
$ cd dir1/dir2
$ ccrypt -c hosts.cpt
Enter decryption key: (soldesk1.) 127.0.0.1 localhost 127.0.1.1 kali2.example.com kali2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
$ ccrypt -d hosts.cpt
Enter decryption key: (soldesk1.) ccrypt: hosts.cpt: 허가 거부 |
-> permission denied
[추가적인 실습] user02 사용자로 수행
$ cp hosts.cpt file1 ($ md5sum hosts.cpt file1) ---> 가능
$ mv hosts.cpt file2 ($ md5sum file1 file2) ----> 가능
$ rm -f file2 --> 가능
④ user02 사용자 로그 아웃
$ exit
#
⑤ user01 사용자 로그 아웃
[TERM1] user01 사용자 터미널
$ exit
#
(정리) ccrypt 명령어
user01 사용자가 암호화한 파일(EX: file1.cpt)을 user02 사용자 복호화할 때는 다음과 같은 형식을 사용한다.
$ ccrypt -c file1.cpt > file1
ccrypt 명령어의 -r 옵션은 디렉토리안의 파일들을 개별적으로 암호화 한다.
$ ccrypt -r dir1$ ccrypt -d -r dir1
특정 디렉토리 전체(EX: /test/dir1)에 대해서 백업시 암호화 하고 싶다.
# tar cvzf /backup/backup.tar.gz /test/dir1# ccrypt /backup/backup.tar.gz
[실습] 사전 파일을 이용한 공격 프로그램
사용시스템
kali
사용 언어
쉘스크립트(Shell Script)
파이썬(Python)
준비 사항
(주의) user02 사용자로 공격 프로그램을 개발한다.
(주의) /test/file1.txt.cpt 파일이 존재해야 한다.(ccrypt CMD 이용하여 암호화된 파일)
# cd /test
# rm -rf /test/*
# cp /etc/hosts file1.txt
# ccrypt file1.txt -> 암호: soldesk1.
① 준비사항 - 관리자로 사전 파일 생성(EX: /python/dict/dict.txt)
# mkdir -p /python/dict
# chmod -R 777 /python
# tree -C /python
# cd /python/dict
# cat << EOF > dict.txt
user01
user02
admin
soldesk1.
administration
EOF
② user02 사용자로 로그인
# ssh -X user02@localhost
user02 사용자로 로그인
$ id
uid=1002(user02) gid=1002(user02) groups=1002(user02) |
$ pwd
/home/user02 |
③ 공격 프로그램 개발(Bash Shell Script)
공격 프로그램 개발 원리
$ cd /test
$ ccrypt -c -K 'soldesk1.' file1.txt.cpt
$ echo $?
0
$ ccrypt -c -K 'abc' file1.txt.cpt
$ echo $?
$ cd /python
$ vi attack_ccrypt.sh ($ vi /python/attack_ccrpt.sh)
attack_ccrypt.sh
#!/bin/bash
DictionaryFile='/python/dict/dict.txt'
EncFile='/test/file1.txt.cpt'
for i in $(cat $DictionaryFile)
do
ccrypt -K $i -c $EncFile > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "[ OK ] Key found => $i"
break
else
echo "[ FAIL ] Key not found => $i"
fi
sleep 1
done
$ chmod 755 *.sh
$ ./attack_ccrypt.sh
[ FAIL ] Key not found => user01 [ FAIL ] Key not found => user02 [ FAIL ] Key not found => admin [ OK ] Key found => soldesk |
attack_ccrypt2.sh 기능을 확장한 프로그램
#!/bin/bash
DictionaryFile='/python/dict/dict.txt'
EncFile='/test/file1.txt.cpt'
DecFile=$(basename $EncFile | sed 's/.cpt$//')
crack() {
ccrypt -c -K $i $EncFile > $DecFile
echo "===== Decrypted File Contents ====="
cat $DecFile
}
for i in $(cat $DictionaryFile)
do
ccrypt -c -K $i $EncFile >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "[ OK ] Key found => $i"
echo
crack
break
else
echo "[ FAIL ] Key not found => $i"
fi
sleep 1
done
# chmod 755 attack_ccrypt2.sh
# ./attack_ccrypt2.sh
[ FAIL ] Key not found => user01 [ FAIL ] Key not found => user02 [ FAIL ] Key not found => admin [ OK ] Key found => soldesk1. ===== Decrypted File Contents ===== 127.0.0.1 localhost 127.0.1.1 kali.example.com kali # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
④ 공격 프로그램 제작(Python Script)
$ vi attack_ccrypt.py ($ vi /python/attack_ccrypt.py)
attack_ccrypt.py
##!/usr/bin/python3
import os
dictfile = '/python/dict/dict.txt'
encfile = '/test/file1.txt.cpt'
def main():
with open(dictfile) as fd:
for word in fd.readlines():
word = word.rstrip()
cmd = 'ccrypt -c -K %s %s > /dev/null 2>&1' % (word,encfile)
ret = os.system(cmd)
if ret == 0:
print('[ OK ] : Key found - ', word)
break
else:
print('[ FAIL ] : key not found - ', word)
if __name__ == '__main__':
main()
$ chmod 755 attack_ccrypt.py
$ ./attack_ccrypt.py
[ FAIL ] : Key not found - user01 [ FAIL ] : Key not found - user02 [ FAIL ] : Key not found - admin [ OK ] : Key found - soldesk1. |
[참고] 사전 파일 만들기
(ㄱ) 인터넷 상에 구할 수 있는 사전 파일
- 이전에 크랙이 많이 되었던 ID/PASS 사전 파일
- 장비, 소프트웨어 등에서 사용되는 default ID/PASS 포함된 사전 파일
- 특정 소프트웨어에서 많이 사용되는 ID/PASS 사전 파일
(ㄴ) 칼리리눅스 내에 내장된 사전 파일 사용
- cd /usr/share/wordlists
(ㄷ) 직접 생성한 사전 파일(명령어 사용하는 경우)
- crunch CMD 생성
- CeWL CMD 생성
- john CMD 생성
(예) CeWL 명령어는 특정한 웹사이트에 있는 단어를 크롤링하여 사전 파일 생성
# cewl http://www.soldesk.co.kr -d 1 -m 6 -w soldesk.txt
(예) crunch 명령어를 사용하여 제작
# crunch 1 3
# crunch 1 5 user2 > dict.txt
# crunch 4 8 'abcdefghijklmnopqrstuvwxyz0123456789' -o dict.txt
# crunch 8 8 0123456789 -t user@@@@ -o dict.txt
* @@@@ 자리에 숫자를 가지고 사전 파일을 생성한다.
'현대 암호학' 카테고리의 다른 글
[현대 암호학] 05. 블록 암호 모드 (0) | 2021.06.23 |
---|---|
[현대 암호학] 04. 실습(2) (0) | 2021.06.23 |
[현대 암호학] 04-6. AES - Rijindael (0) | 2021.06.22 |
[현대 암호학] 04-5. AES 선정 과정 (0) | 2021.06.22 |
[현대 암호학] 04-4. 트리플 DES (0) | 2021.06.22 |