TECH 으로 돌아가기
TECH HACKER NEWS 오늘 5분 읽기 32 READS

유니클로 티셔츠에 프린트된 난독화 bash 스크립트, 정체를 파헤쳐 봤습니다

유니클로 티셔츠에 프린트된 난독화 bash 스크립트, 정체를 파헤쳐 봤습니다

티셔츠에 프린트된 코드가 진짜 '돌아가는' 스크립트였습니다

티셔츠에 알록달록한 코드 무늬가 박혀 있는 거, 한 번쯤 보셨죠? 대부분은 그냥 분위기용 그래픽이라 자세히 보면 아무 의미 없는 글자 나열인 경우가 많아요. "개발자st 감성" 내는 용도인 거죠. 그런데 한 개발자가 유니클로 티셔츠에 찍힌 문양을 진지하게 들여다봤더니, 그게 진짜로 컴퓨터에서 실행되는 bash 스크립트였다는 걸 발견했어요. 심지어 그냥 코드도 아니고, 일부러 사람이 못 읽게 배배 꼬아 놓은 난독화(obfuscation) 스크립트였고요. 글쓴이는 이걸 두고 "아카마이(Akamai) 같은 CDN이 아니라, 유니클로 매장이 소비자에게 코드를 배포하는 셈"이라고 재치있게 표현했더라고요.

난독화된 bash, 한 겹씩 벗겨보면

여기서 '난독화'가 뭔지부터 짚고 갈게요. 난독화는 코드가 하는 일은 그대로 두면서 사람 눈으로는 읽기 어렵게 일부러 뒤죽박죽 만드는 기법이에요. 예를 들어 echo hello라고 쓰면 될 걸, 글자를 아스키 코드 숫자로 바꾸고, base64로 인코딩하고, 변수에 쪼개 담았다가 eval로 다시 합쳐서 실행하는 식이죠.

특히 이 스크립트는 '자기 자신을 평가(self-evaluating)'하는 구조였는데요. bash에서 eval "$변수"$(명령) 같은 문법은 문자열을 그대로 명령어로 실행해버려요. 그래서 겉보기엔 의미 없는 문자열 덩어리처럼 보여도, 실행하는 순간 그 안에서 진짜 명령이 튀어나오는 거예요. 마치 러시아 인형 마트료시카처럼 껍질 안에 또 껍질이 들어있는 구조죠.

이런 걸 해독할 때 절대 하면 안 되는 게 그냥 실행해보는 거예요. 무슨 짓을 할지 모르니까요. 안전하게 푸는 정석은 evalecho로 바꿔서 "실행 대신 화면에 뿌리게" 만드는 거예요. 그러면 한 겹이 벗겨진 코드가 눈에 보이고, 또 그 안의 base64 -d나 치환 로직을 하나씩 손으로 풀어가면서 마트료시카를 한 겹씩 열어보는 거죠.

사실 이건 보안 실무의 축소판이에요

이런 난독화 기법은 사실 악성코드(멀웨어)가 백신을 피하려고 흔히 쓰는 수법이에요. 침해사고 대응이나 CTF(보안 경진대회)에서 로그에 박힌 수상한 base64 문자열, 웹셸, 파워셸 한 줄 공격을 만나면 정확히 이 과정을 거쳐요. 그래서 티셔츠 하나 해독하는 게 장난 같아 보여도, 실제로는 리버스 엔지니어링 근육을 그대로 쓰는 훈련인 셈이죠. 옷에 프린트하기 전에 누군가 이걸 검수는 했을까 싶은, 공급망 관점의 웃픈 포인트도 있고요.

한국 개발자에게

bash 난독화 해독은 CTF 입문이나 보안 실무에 발 담그기 딱 좋은 소재예요. 거창한 장비 없이 리눅스 터미널 하나면 연습할 수 있거든요. 특히 eval, 프로세스 치환 $(...), base64, 변수 간접 참조 같은 문법에 익숙해지면, 남이 짜 놓은 알 수 없는 스크립트를 만났을 때 겁먹지 않게 돼요. 반대로 내가 셸 스크립트를 배포할 땐 절대 이렇게 꼬지 말고 읽기 좋게 짜는 게 예의라는 것도 같이 기억해두면 좋겠네요.

정리하면, "겉보기 무의미해 보이는 코드도 실행되면 의미가 생긴다"는 게 이 이야기의 핵심이에요. 여러분이 입고 있는 옷이나 머그컵의 코드 무늬, 혹시 진짜 돌아가는 코드는 아닐까요? 발견하면 어떻게 해독해볼지 한번 이야기해봐요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://tris.sherliker.net/blog/obfuscated-self-evaluating-b...
SHARE
처리 중...