설명
하드코딩된 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()을 제공해야 합니다.