left-pad
IT계의 대표적인 보안 사고 중 하나로 "left-pad" 이슈가 있다.
이 문제는 일종의 Supply Chain Attack의 예로,
개발자가 많이 사용하는 JavaScript 라이브러리인
"left-pad"가 갑자기 npm(Node Package Manager) 저장소에서 삭제됨으로써 일어났다.
이를 기반으로 하여 다양한 공격 기법들이 발생하였고, 여러 조직이 피해를 입었다.
이에 대표적인 사건하나가 있는데
2016년 3월, Node.js 생태계에서 매우 유명한 패키지인 "left-pad"가 배포 중단되면서 큰 파장을 일으켰다.
이 패키지는 문자열을 왼쪽으로 채우는 함수를 제공하며, 거의 모든 Node.js 개발자들이 일상적으로 사용하는 패키지 중 하나였다.
"left-pad" 이슈는 이 패키지를 개발한 개발자가 npm이라는 패키지 매니저에서 자신의 패키지를 제거하면서 시작되었다.
아래 코드는 "left-pad" 이슈의 주요 코드이다. 문자열을 지정한 길이(len)만큼 왼쪽에 지정한 문자(ch)로 채우는 기능을 수행한다.
이 의존성 모듈이 제거되면서 다른 모듈들이 사용하는 API의 인자값이 변경되어 컴파일 에러가 발생하였다.
구체적으로는 이 의존성 모듈이 제공하던 left-pad 함수의 인자 순서가 바뀌었기 때문에,
이를 사용하던 모듈들이 다시 빌드되어야 했습니다. 이러한 문제는 특히 의존성 모듈의 업데이트가 빈번히 일어날 수 있는
JavaScript 생태계에서 더욱 심각한 문제로 작용할 수 있기 때문에 일부 개발자들은 의존성 모듈을 사용하는 것에 대해 비판적이다.
module.exports = leftpad;
function leftpad (str, len, ch) {
str = String(str);
var i = -1;
if (!ch && ch !== 0) ch = ' ';
len = len - str.length;
while (++i < len) {
str = ch + str;
}
return str;
}
이로 인해 "left-pad" 패키지가 의존하는 다른 패키지들이 작동하지 않게 되어, 수많은 Node.js 애플리케이션들이 크래시되었다.
이 문제는 "left-pad" 패키지를 직접 사용하지 않은 애플리케이션들도 영향을 받았는데,
이는 "left-pad" 패키지가 다른 패키지들의 의존성(dependency)으로 포함되어 있었기 때문이였다.
이번 포스팅에서는 "left-pad" 이슈를 비롯하여 Supply Chain Attack에 대한 개념과 함께,
주요 공격 사례들과 그에 따른 예방 및 보호 방법에 대해서 알아보겠다.
Supply Chain Attack 이란?
Supply Chain Attack은 기본적으로 조직의 보안 방어체계를 우회하여, 조직이 신뢰하는 다른 조직이나 개인을 공격하는 기법이다. 즉, 특정 조직의 공급망에서 취약점을 찾아내어 그를 이용하여 전체 시스템을 공격하게 된다.
NPM Account 공격 사례
"left-pad" 이슈와 함께 대표적인 Supply Chain Attack 사례 중 하나인 NPM Account 공격 사례가 있다.
2018년 7월, 해커가 npm의 인기 패키지 중 하나인 "event-stream"을 공격하여 개인 정보를 탈취하였다.
이로 인해 많은 사용자가 피해를 입었다.
MathJS 공격 사례
MathJS는 웹 기반 수학 처리를 위한 JavaScript 라이브러리 중 하나이다. 2019년 5월, MathJS는 npm 저장소에서 공격을 당해,
공격자는 MathJS 라이브러리를 수정하여 사용자들의 기밀 정보를 탈취하였다.
Installation Scripts 공격 사례
Installation Scripts는 리눅스나 macOS와 같은 운영체제에서 패키지 설치나 업데이트를 자동화하는 기능을 제공한다.
2019년 9월, 해커가 악성 Installation Scripts를 설치해, 사용자들의 컴퓨터를 제어하고 데이터를 탈취하였다.
Typosquatting Attack 공격 사례
Typosquatting Attack은 사용자가 실수로 맞춤법이나 철자가 틀린 비슷한 이름을 입력할 때 발생한다.
예를 들어, "githib" 대신 "github"를 입력하는 경우에 공격자는 이를 이용하여
사용자들이 실수로 다운로드하는 모듈에 악성 코드를 삽입할 수 있다.
이는 NPM의 "got" 모듈에서 발견된 적이 있으며 악성 패키지는 "got" 대신 "goot"으로 이름이 변경되었다.
'IT최신동향' 카테고리의 다른 글
소프트웨어 자산 범위와 자산관리에 대해 (0) | 2022.05.02 |
---|