Last Updated on 11월 22, 2023 by Jade(정현호)
shc 는 쉘 스크립트를 암호화 바이너리로 바꿔 주는 프로그램입니다.
시스템에서 쉘 스크립트를 사용하다 보면 보면 민감한 데이터들이 일반 text 로 노출이 되게 되는데 이를 방지하기 위해 사용할 수 있습니다.
사이트
사이트 주소는 아래 와 같습니다
http://www.datsi.fi.upm.es/~frosal/
직접 다운로드 경로는 아래와 같습니다.
http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
다운로드 및 설치
설치 파일을 다운로드 및 설치를 진행하겠습니다.
• 파일 다운로드 및 압축 해제
user$ wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz user$ tar zxvf shc-3.8.9b.tgz user$ cd shc-3.8.9b
CentOS7 기준으로 man 페이지 파일의 경로와 makefile 에서 설정된 결과가 달라서 man 페이지 복사에 에러가 발생될 수 있어서 makefile 을 수정하고 진행하도록 하겠습니다.
man 페이지 파일이 크게 중요치 않거나 필요치 않다면 수정 없이 진행합니다.
• makefile 수정
## 파일 백업 user$ cp makefile makefile.old ## 파일 내용 변경 user$ sed -i "s/man\//share\/man\//g" makefile
• make install(설치) 진행 - 기본 경로
user$ sudo make install cc -Wall shc.c -o shc *** Installing shc and shc.1 on /usr/local *** Do you want to continue? y <-- 질문에 y 를 입력합니다. ... ... install -c -s shc /usr/local/bin/ install -c -m 644 shc.1 /usr/local/share/man/man1/
• make install(설치) 진행 - 다른 경로
기본적으로 다음의 경로에 파일이 위치하게 됩니다.
/usr/local/bin/
/usr/local/share/man/man1/
다른 경로에 설치를 원하거나 일반 유저로 설치를 진행해서 홈 디렉토리 등에 설치가 필요한 경우 다른 경로에 설치를 다음과 같이 진행합니다.
다음과 같은 홈 디렉토리에 아래에 설치를 진행할 경우
/home/jade/shc
makefile 에서 INSTALL_PATH 환경변수를 다음과 같이 수정합니다.
#INSTALL_PATH = /usr/local <-- 주석처리
INSTALL_PATH = /home/jade/shc
그 다음 디렉토리를 미리 생성합니다.
mkdir -p /home/jade/shc/bin
mkdir -p /home/jade/shc/share/man/man1
makefile 파일 수정과 디렉토리 생성이 완료되었다면 설치를 진행합니다.
$ make install
실행 및 사용법
사용법은 간단 합니다
아래와 같은 형태로 암호화하고자 하는 쉘 스크립트를 지정하면 됩니다.
먼저 테스트 쉘 스크립트를 간단하게 만들어 보겠습니다.
user$ vi test.sh ### 아래 내용으로 파일을 작성 #!/bin/bash echo "hello world" ### 쉘 스크립트 실행 user$ sh test.sh hello world
그 다음 shc 를 이용하여 쉘 스크립트를 암호화를 진행하도록 하겠습니다.
user$ shc -f test.sh user$ ls -alrt test.sh* -rwxr-xr-x. 1 user user 32 12월 27 22:00 test.sh -rw-r--r--. 1 user user 9298 12월 27 22:00 test.sh.x.c -rwx--x--x. 1 user user 15872 12월 27 22:00 test.sh.x ==> test.sh.x 파일이 생성됨
암호화된 바이너리 실행 파일이 정상적으로 실행되는지 확인해보도록 하겠습니다.
## 실행권한 설정 user$ chmod 755 test.sh.x ## 파일 실행 user$ ./test.sh.x hello world <-- 정상 출력됨
생성된 test.sh.x 파일 확인을 cat 으로 확인해 보도록 하겠습니다.
user$ cat test.sh.x @@@@@@@@@@ tgetpidkillstrdupgetppidcall <중략.. 바이너리 암호화 되어있음>
strings 명령어로도 확인해보도록 하겠습니다.
user$ strings test.sh.x /lib64/ld-linux-x86-64.so.2 libc.so.6 sprintf perror __isoc99_sscanf fork time _exit getpid kill strdup getppid calloc strlen memset __errno_location memcmp < 내용 중략 >
strings 명령어로 확인하였을 때도 쉘 스크립트의 내용(코드)이 확인되지 않습니다.
암호화시 사용 가능 옵션
-e date : 만료일 지정 (dd/mm/yyyy)
-m message : 만료일이 지났을 경우 메시지 출력
-f script_file : 스크립트 파일을 지정하여 바이너리 생성
연관된 다른 글
RHEL의 소스를 기반으로 만들어지며 RHEL에서 최대한 추가나 제거를 자제하는 것을 원칙으로 가장 유사하게 Rebuild 한 배포판 입니다.
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io