XZ Utils 버젼(5.6.0,1) 확인 스크립트 (Bash Oneliner)

XZ Utils

리눅스의 XZ UtilsXZ 압축 형식을 사용하는 무료 소프트웨어 명령줄(Command Line Interface) 도구 모음으로, 높은 압축 비율을 제공하여 파일 및 패키지의 크기를 효율적으로 줄일 수 있다. 이 도구 세트는 데이터를 압축된 형태로 관리, 배포 및 저장하는 데 필수적이며, 특히 공간 절약이 우선시 되는 리눅스 배포판 소프트웨어 패키징 및 아카이빙과 같은 환경에서 주로 사용된다. XZ Utils의 핵심은 파일을 압축하고 압축을 해제하는 기능을 제공하는 xz 명령이다. 다수의 리눅스 배포판에서 채택함에 따라 xz는 압축된 파일을 처리하는 표준 도구가 되었으며, 압축 비율과 유연성 측면에서 이전 압축 방법보다 상당한 장점을 제공한다.

기본이 되는 xz 명령어 외에도, XZ Utils은 파일 관리의 다양한 영역으로 유틸리티의 기능을 확장하는 xzdiff, xzgrep, xzless, xzmore 와 같은 추가 명령어를 포함한다. 예를 들어, xzdiff는 압축을 해제하지 않고도 압축된 파일의 내용을 비교할 수 있게 해주고, xzgrep압축된 파일 내에서 검색을 가능하게 하며, xzlessxzmore압축된 텍스트 파일을 페이지별로 볼 수 있는 수단을 제공한다.

이 도구들은 특정 작업을 잘 수행하고 복잡한 워크플로를 수행하기 위해 결합될 수 있는 작고 견고한 도구를 만드는 것을 강조하는 유닉스의 철학에 기반을 두고 있으며, 이러한 접근 방식은 중간 압축 해제 단계 없이 압축된 데이터로 효율적으로 작업할 수 있는 유연성을 사용자에게 보장한다. 그리고, 파일 분석, 데이터 추출, 내용 비교와 같은 작업을 간소화 해서 디스크 공간을 절약할 수 있게 도울 뿐만 아니라, 작업 단순화를 통해 생산성 향상에 도움을 준다.

XZ Utils 는 압축된 파일을 효율적으로 관리 및 처리할 수 있다는 점에서 리눅스 환경에서 중요한 위치를 차지한다. 계속적으로 증가하는 데이터의 양에 발 맞추어 효과적인 압축 솔루션의 필요성 또한 증가하는 것이다. XZ Utils는 이런한 필요를 리눅스 환경의 호환성과 사용의 용이성을 충족시키면서도 강력한 압축 기능을 제공하는 솔루션이다.

Bash Oneliner

다음은 XZ Utils의 버젼 정보를 확인할 수 있는 Bash 원라이너(Oneliner) 스크립트다.

for f in $(find /usr/bin -iname 'xz*' -type f); \
 do echo "-------------------------------- $f"; \
 strings $f | grep "(XZ Utils) "; \
done
-------------------------------- /usr/bin/xz
xz (XZ Utils) 5.2.5
-------------------------------- /usr/bin/xzdec
xzdec (XZ Utils) 5.2.5
-------------------------------- /usr/bin/xzdiff
version="$prog (XZ Utils) 5.2.5"
-------------------------------- /usr/bin/xzgrep
version="$prog (XZ Utils) 5.2.5"
-------------------------------- /usr/bin/xzless
version='xzless (XZ Utils) 5.2.5'
-------------------------------- /usr/bin/xzmore
version='xzmore (XZ Utils) 5.2.5'

Breakdown

위의 Bash 한 줄 스크립트는 /usr/bin 디렉토리에서 ‘XZ Utils‘와 관련된 바이너리 파일을 검색한 다음 해당 파일에서 버전 정보를 추출해 출력한다. 스크립트를 각 단위로 분해한 뒤, 구성 요소와 기능을 이해해 보자:

  1. for f in $(find /usr/bin -iname 'xz*' -type f);:
    • for 루프를 시작하여 find 명령으로 찾은 각 파일에 대해 반복한다.
    • find /usr/bin은 Linux에서 실행 파일이 일반적으로 위치하는 /usr/bin 디렉토리 내에서 검색할 것을 지정한다.
    • -iname 'xz*'는 “xz”로 시작하는 파일을 대소문자 구분 없이 찾는다. 이름이 “xz”로 시작하는 XZ Utils 관련 실행 파일을 모두 찾기 위해 사용한다.
    • -type f는 디렉토리가 아닌 파일만 찾도록 제한한다.
    • find 명령의 결과는 for 루프가 반복될 때마다 리스트에 저장되며, 각 항목(파일 경로)은 차례로 변수 f에 할당된다.
  2. do echo "-------------------------------- $f";:
    • 각 반복에서 이 명령은 구분선(--------------------------------)과 현재 f에 저장된 파일 경로를 출력한다. 검색에서 찾은 파일들을 시각적으로 구분하기 위함.
  3. strings $f | grep "(XZ Utils) ";:
    • strings $ff값의 경로가 가리키는 바이너리 파일에서 인쇄 가능한 문자열을 추출한다. 해당 파일 내에서 문자열만 찾기 위함.
    • strings의 출력은 grep "(XZ Utils) "로 파이프되며, 여기에서 “(XZ Utils) “를 포함하는 문자열만 필터링한다. 결과적으로 해당 바이너리의 버전 정보를 출력한다.
  4. done:
    • for 루프의 끝.

위 원라이너 스크립트를 요약하면, 시스템에 설치된 XZ Utils 바이너리의 버전 정보를 찾아 출력한다. 특정 경로 /usr/bin에 있는 XZ Utils의 실행파일을 찾고, 해당 파일의 경로가 포함된 헤더를 출력한 다음, 파일 내부에서 추출된 버전 정보를 표시한다.

참고자료

위 스크립트는 최근 리눅스 배포판에 포함된 XZ Utils의 리포지토리에서 악의적인 코드가 발견됨에 따라, 취약한 XZ Utils 명령어 존재 여부를 확인하기 위한 배시쉘 원라이너 스크립트다. XZ Utils 소스코드 공격에 관련된 내용은 아래 카스퍼스키에서 공개한 블로그 포스트에서 자세한 내용을 확인할 수 있다.

+ There are no comments

Add yours

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.