고객사의 인프라 진단을 자동으로 수행하기 위해 대상별, 항목별 자동화 스크립트를 만들어 담당자에게 전달한다. 컨설팅 회사에서 만든 스크립트를 상업적으로 이용하거나 다른 업체에 배포하는 일이 발생한다.


이를 위해 스크립트는 컨설팅 회사 고유의 자산이므로 암호화 및 난독화를 적용하면 이런 일이 발생하지 않는다. 물론, 제안서에 스크립트 현행화가 있다면 말이 달라진다.


기본적으로 유닉스 기반의 진단 스크립트는 코드 보호 및 진단한 텍스트 결과 파일을 암호화를 한다.


암호화를 하는 명령어는 리눅스(유닉스)에 기본적으로 설치되어 있는 openssl 명령어인데, 최신 버전에서 에러가 발생했다. 구 버전과 최신 버전의 차이점을 설명하고, 어떻게 해결하는지 알아보자.

 

암호화/복호화 버전 차이 : OpenSSL 1.0.2k, 1.1.1b

openssl 구 버전(OpenSSL 1.0.2k)을 사용하는 시스템에서 텍스트 파일을 암호화를 하면 정상적으로 암호화 된 값이 출력된다.


○ cat 1.txt | openssl enc -e -aes-256-cbc -a -k 1234 > 2.txt



openssl 구 버전에서 생성한 암호화 된 텍스트 파일을 openssl 최신 버전(OpenSSL 1.1.1b)을 사용하는 시스템에서 복호화를 하면 에러가 발생하여 복호화에 실패한다.


○ cat 2.txt | openssl enc -d -aes-256-cbc -a -k 1234



에러 메시지를 보면 enc 옵션의 취약성으로 pbkdf2 옵션을 사용할 것을 권고하고 있다. 하지만, 구 버전은 pbkdf2 옵션을 지원하지 않는다.


○ cat 1.txt | openssl enc -e -aes-256-cbc -pbkdf2 -a -k 1234 > 2.txt



구 버전은 암호화를 할 때 기본적으로 md5를 사용한다. 그렇다면 구 버전과 최신 버전에 공통적으로 적용될 수 있도록 md5를 sha256으로 변경하여 암호화를 시도한다.


○ cat 1.txt | openssl enc -e -aes-256-cbc -md sha256 -a -k 1234 > 2.txt



openssl 구 버전에서 생성한 암호화 된 텍스트 파일을 최신 버전을 사용하는 시스템에서 복호화를 하면 복호화 된 값이 출력된다.


○cat 2.txt | openssl enc -d -aes-256-cbc -md sha256 -a -k 1234



해당 옵션을 사용하면 정상적으로 암호화 및 복호화가 된다. 하지만, 에러 메시지가 계속 출력되는 것으로 봐서 언젠가 지원이 되지 않을 수 있다. 이를 위해 인증서를 사용하거나 gpg로 암호화를 수행하면 된다.



#!/bin/sh

LANG=C
export LANG

echo ""
echo "▶ gpg 명령어를 이용한 AES 암호화/복호화 테스트 스크립트"
echo -n "    (ex. 암호화(1), 복호화(2)) : " > /dev/tty
read TYPE < /dev/tty
echo ""

if [ $TYPE -eq 1 ];then
  echo "AES 암호화 명령어 : gpg --cipher-algo AES256(암호화종류) --symmetric --batch --yes(묻지마모드) -q(최대한빨리끝냄) --passphrase 1234(패스워드) -o script-enc(암호화파일명) test.sh(원본파일명)"
  gpg --cipher-algo AES256 --symmetric --batch --yes -q --passphrase 1234 -o script-enc iSecure_FreeBSD_Check_v0.1.sh
  echo ""
  echo "[*] AES 암호화 완료 !!!"
  echo ""
  echo "" 
  echo "" 
elif [ $TYPE -eq 2 ];then
  echo "AES 복호화 명령어 : gpg --batch --yes --yes(묻지마모드) -q(최대한빨리끝냄) --passphrase 1234(패스워드) -d(복호화) script-enc(암호화파일명)"
  echo ""
  echo "[*] AES 복호화 완료 !!!"
  echo ""
  echo "" 
  echo "" 
  gpg --batch -q --passphrase 1234 -d script-enc | sh -
  rm -rf script-enc
else
  echo "[*] 입력 에러 !!!"
  echo " AES 암호화 : 1, AES 복호화 : 2 입력!!!"
  echo ""
  echo "" 
  echo "" 
fi

▶ 스크립트 난독화 및 암호화 (bash obfuscate)

▶ Linux 쉘스크립트 문법 및 예제

▶ Linux 쉘스크립트 팁 공유

▶ expect 스크립트 자동화

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유