하드코딩된 인코딩 데이터의 코드 실행

하드코딩된 데이터의 코드 해석

설명

하드코딩된 hex 또는 base64 문자열을 디코딩한 뒤 require, eval, Function 같은 코드 실행 또는 모듈 로딩 API에 전달하면 악성 동작을 숨기는 백도어 패턴이 될 수 있습니다. 난독화된 상수는 실제 동작을 검토하기 어렵게 합니다. 인코딩 자체가 악성 동작의 증거는 아니므로 디코딩된 내용과 실행 목적을 확인해야 합니다.

잠재적 영향

  • 숨겨진 악성 모듈 로딩 또는 임의 코드 실행이 발생할 수 있습니다.
  • 리뷰어가 실제 실행되는 코드나 모듈 경로를 파악하기 어려워 악성 변경이 배포될 수 있습니다.
  • 공격자가 난독화된 문자열을 통해 권한 탈취, 데이터 유출, 추가 페이로드 다운로드를 수행할 수 있습니다.

해결 방법

  • 동적으로 디코딩한 문자열을 코드 또는 모듈 경로로 해석하지 마세요.
  • 필요한 모듈 경로는 평문 상수와 정적 import 또는 require로 관리하세요.
  • 난독화가 필요한 정당한 사유가 있다면 코드 소유권, 생성 절차, 무결성 검증을 문서화하세요.

예시

변경 전

javascript
const hiddenPath = Buffer.from("2e2f706c7567696e", "hex").toString();
const plugin = require(hiddenPath);

eval(atob("Y29uc29sZS5sb2coJ3J1bicp"));

변경 후

javascript
const plugin = require("./plugin");

function runTask() {
  return plugin.run();
}

설명:

  • 변경 전: 인코딩된 상수를 런타임에 디코딩해 모듈 경로나 코드로 실행하므로 실제 동작을 숨길 수 있습니다.
  • 변경 후: 모듈 경로와 실행 흐름을 명시해 검토할 수 있게 합니다. 구현이 생략된 ./plugin은 신뢰할 수 있는 모듈이어야 하며 run()을 제공해야 합니다.

참조