2020.04.21

루비 개발자를 공격하는 '루비젬스 타이포스쿼팅' 공격

Lucian Constantin | CSO
프로그래밍 언어인 루비(Ruby)의 인기 서드파티 컴포넌트 리포지터리인 루비젬스(RubyGems)에 적법한 이름으로 가장한 악성 패키지 700여 개가 업로드됐다.

 
연구원에 따르면, 2월 한 주 동안 악성 패키지들이 업로드됐다. 이 악성 패키지에는 윈도우 컴퓨터에 실행할 때, 암호화폐 트랜잭션을 하이재킹하는 악성 스크립트가 포함되어 있었다. 수령인의 지갑 주소를 공격자가 통제하는 주소로 바꾸는 스크립트다.

최근 몇 년, 서드파티 컴포넌트 및 라이브러리를 통한 공급망 공격이 오픈소스 컴포넌트 리포지터리 사용자들에게 많은 피해를 줬다. 자바스크립트 및 파이썬 개발자들이 각각 사용하는 NPM과 PyPI(Python Package Index) 공격을 예로 들 수 있다.

가장 최근 루비젬스 공격에도 사용됐던 공격 기법 가운데 하나는 타이포스쿼팅(Typosquatting)이다. 이는 기존 패키지와 유사한 이름을 갖고 있지만, 실제는 개발자가 패키지 이름을 수동으로 입력하면서 잘못 입력해 발생하는 흔한 오자들을 이름으로 사용하는 악성 패키지를 퍼블리싱하는 공격 기법이다. 예를 들어, rspec-mocks 대신 rspec-mokcs를 사용하는 방식이다.


보호책이 거의 없는 소프트웨어 리포지터리

위협 인텔리전스 업체인 레버싱랩스(ReversingLabs) 공동 창업자 토미슬라프 페리신은 본지에 “소프트웨어 개발자가 리포지터리에서 다운로드받아 설치한 패키지에 악성코드가 포함되어 있지 않도록 만들 보호책이 거의 없다. 악성코드 탐지가 전문인 소프트웨어 공급업체들은 통상 개발자 환경과 통합되어 있지 않다. 현재 악성코드 탐지 임무는 엔드포인트 보호 솔루션으로 아웃소싱 되는데, 이런 솔루션은 최종 사용자를 표적으로 하는 여러 종류의 악성코드에 초점이 맞춰져 있다. 시장에 허점이 있고, 악성코드 개발자들이 이를 악용한다”라고 설명했다.

공격자가 암호화폐를 훔치는 데 관심을 뒀던 이번 공격의 경우에도, 이들이 사용한 클립보드 하이재킹 스크립트를 손쉽게 바꿔 피해자가 자신의 컴퓨터에 복사해 붙여넣은 로그인 정보를 훔칠 수 있다.

이런 공격은 다양한 내부 개발, 소프트웨어 구축 환경을 이용하는 개발자들을 표적으로 삼는다. 따라서 피해가 중대할 수 있고, 이들이 만든 소프트웨어를 사용하는 사용자를 대상으로 하는 공급망 공격으로 확대될 수 있다.


루비젬스 공격 방식

현대적인 애플리케이션은 오리지널 코드의 비중이 크지 않다. 코드베이스의 대부분은 다른 사람이 개발, NPM, PyPi, 루비젬스 같은 리포지터리에 퍼블리싱한 재사용이 가능한 컴포넌트에 토대를 두고 있다. 이는 소프트웨어 개발 프로세스를 단순화시키고, 그 속도를 높이는 방식이다. 그러나 코드 무결성 및 보안과 관련된 보안 문제를 초래한다. 업계는 이 문제를 아직 해결하지 못한 상태다.

루비 프로그래밍 언어로 쓰인 컴포넌트를 젬(gems)이라 부른다. 기본적으로 특정 디렉터리 구조를 갖고 있는 TAR 아카이브이다. 매니페스트 파일, 바이너리, 라이브러리, 테스트로 구성되어 있다. 흥미로운 특징은 실행 코드 형식의 확장자를 포함할 수 있는 것이다. 이번에 공격자들이 악용한 기능성이다.

레버싱랩스가 발견한 악성 젬은 2개 계정으로부터 업로드됐으며, /ext/trellislike/unflaming/waffling/ 디렉터리 경로 아래 aaa.png라는 확장자를 포함하고 있었다. PNG 이미지로 가장하고 있었지만, 실제는 윈도우 PE(Portable Executable)였다. 이 공격은 윈도우를 개발 환경으로 사용하는 루비 개발자가 표적이었다.

이 악성 패키지에 포함된 생성 파일(Makefile)은 루비 설치 도구가 설치 동안 aaa.png를 aaa.exe로 이름을 바꿔 실행하도록 명령했다. 이는 사용자의 개입 없이 이뤄지는 작업이었다. Aaa.exe는 Ruby2Exe로 만든 루비 프로그램으로 난독화 VBS(Visual Basic Script)를 배포했다. VBScript는 윈도우 시스템에서 기본으로 지원되는 스크립팅 언어다.

VBS 파일은 프로그램 데이터 디렉터리에 Software Essentials.vbs로 저장되었으며, 시스템을 리부트할 때마다 자동으로 시작되도록 설정되어 있었다. 계속해서 컴퓨터 클립보드를 감시, 비트코인 지갑 주소와 일치하는 문자열 패턴을 찾아, 이 문자열을 공격자에게 속한 지갑 주소로 대체하도록 만들어진 스크립트였다.

피해자가 비트코인 거래를 하면서 웹사이트 등에서 수령자의 지갑 주소를 복제할 때마다 복사한 주소가 공격자의 것이 되었다는 의미다. 과거에도 암호화폐 사용자를 표적으로 한 클립보드 하이재킹 공격이 있었다. 그러나 이 경우에는 큰 성공을 거두지 못해 악성 지갑에서 거래가 발생하지 않았다.

하지만 감염을 시킨 방법 자체가 효과적이지 않았다는 의미는 아니다. 공격이 제한적이었다. 마침 레버싱랩스가 루비젬스를 분석한 것, 공격자의 표적이 윈도우 시스템을 사용하고, 비트코인 거래를 한 루비 개발자가 된 이유다.


타이포스쿼팅 방어책을 무력화한 공격

atlas-client(하이픈 부호)라는 악성 잼은 2,100여 차례 다운로드됐다. atlas_cleint(밑줄 부호)라는 적법한 젬의 총 다운로드 횟수의 약 1/3에 해당한다. 700여 악성 패키지 모두 공격자가 적법한 패키지 이름을 복사해, 하이픈 부호를 밑줄 부호로 바꾼, 또는 밑줄 부호를 하이픈 부호로 바꾼 오자 이름을 갖고 있었다.

과거 사고에 대한 대응책으로 편집 거리(Levenshtein distance) 규칙이 추가된 타이포스쿼팅 방지책을 사용하고 있던 루비젬스가 패키지를 차단하지 않은 이유가 여기에 있다. 레버싱랩스가 발견한 악성 잼들의 다운로드 횟수는 9만 5,000여 건에 달한다.

페리신은 “현재 탐지 기능이 도입되어 있을 수 있지만, 공격자가 알고리즘이 놓친 패턴을 발견한 것으로 판단된다. 루비젬스 리포지터리에서 이런 공격을 탐지한 것이 3번째이다. 우리는 소프트웨어 공급망을 보안 통제책이 필요한 아주 큰 공격 표면으로 판단하고 있다. 이번 사고는 개발자가 표적이 될 수 있다는 것을 확인시켜줬다. 의심하지 않는 사용자를 표적으로 하는 공격을 감행할 때 매개체, 수단으로 이용할 수 있는 표적이다”라고 말했다. editor@itworld.co.kr


2020.04.21

루비 개발자를 공격하는 '루비젬스 타이포스쿼팅' 공격

Lucian Constantin | CSO
프로그래밍 언어인 루비(Ruby)의 인기 서드파티 컴포넌트 리포지터리인 루비젬스(RubyGems)에 적법한 이름으로 가장한 악성 패키지 700여 개가 업로드됐다.

 
연구원에 따르면, 2월 한 주 동안 악성 패키지들이 업로드됐다. 이 악성 패키지에는 윈도우 컴퓨터에 실행할 때, 암호화폐 트랜잭션을 하이재킹하는 악성 스크립트가 포함되어 있었다. 수령인의 지갑 주소를 공격자가 통제하는 주소로 바꾸는 스크립트다.

최근 몇 년, 서드파티 컴포넌트 및 라이브러리를 통한 공급망 공격이 오픈소스 컴포넌트 리포지터리 사용자들에게 많은 피해를 줬다. 자바스크립트 및 파이썬 개발자들이 각각 사용하는 NPM과 PyPI(Python Package Index) 공격을 예로 들 수 있다.

가장 최근 루비젬스 공격에도 사용됐던 공격 기법 가운데 하나는 타이포스쿼팅(Typosquatting)이다. 이는 기존 패키지와 유사한 이름을 갖고 있지만, 실제는 개발자가 패키지 이름을 수동으로 입력하면서 잘못 입력해 발생하는 흔한 오자들을 이름으로 사용하는 악성 패키지를 퍼블리싱하는 공격 기법이다. 예를 들어, rspec-mocks 대신 rspec-mokcs를 사용하는 방식이다.


보호책이 거의 없는 소프트웨어 리포지터리

위협 인텔리전스 업체인 레버싱랩스(ReversingLabs) 공동 창업자 토미슬라프 페리신은 본지에 “소프트웨어 개발자가 리포지터리에서 다운로드받아 설치한 패키지에 악성코드가 포함되어 있지 않도록 만들 보호책이 거의 없다. 악성코드 탐지가 전문인 소프트웨어 공급업체들은 통상 개발자 환경과 통합되어 있지 않다. 현재 악성코드 탐지 임무는 엔드포인트 보호 솔루션으로 아웃소싱 되는데, 이런 솔루션은 최종 사용자를 표적으로 하는 여러 종류의 악성코드에 초점이 맞춰져 있다. 시장에 허점이 있고, 악성코드 개발자들이 이를 악용한다”라고 설명했다.

공격자가 암호화폐를 훔치는 데 관심을 뒀던 이번 공격의 경우에도, 이들이 사용한 클립보드 하이재킹 스크립트를 손쉽게 바꿔 피해자가 자신의 컴퓨터에 복사해 붙여넣은 로그인 정보를 훔칠 수 있다.

이런 공격은 다양한 내부 개발, 소프트웨어 구축 환경을 이용하는 개발자들을 표적으로 삼는다. 따라서 피해가 중대할 수 있고, 이들이 만든 소프트웨어를 사용하는 사용자를 대상으로 하는 공급망 공격으로 확대될 수 있다.


루비젬스 공격 방식

현대적인 애플리케이션은 오리지널 코드의 비중이 크지 않다. 코드베이스의 대부분은 다른 사람이 개발, NPM, PyPi, 루비젬스 같은 리포지터리에 퍼블리싱한 재사용이 가능한 컴포넌트에 토대를 두고 있다. 이는 소프트웨어 개발 프로세스를 단순화시키고, 그 속도를 높이는 방식이다. 그러나 코드 무결성 및 보안과 관련된 보안 문제를 초래한다. 업계는 이 문제를 아직 해결하지 못한 상태다.

루비 프로그래밍 언어로 쓰인 컴포넌트를 젬(gems)이라 부른다. 기본적으로 특정 디렉터리 구조를 갖고 있는 TAR 아카이브이다. 매니페스트 파일, 바이너리, 라이브러리, 테스트로 구성되어 있다. 흥미로운 특징은 실행 코드 형식의 확장자를 포함할 수 있는 것이다. 이번에 공격자들이 악용한 기능성이다.

레버싱랩스가 발견한 악성 젬은 2개 계정으로부터 업로드됐으며, /ext/trellislike/unflaming/waffling/ 디렉터리 경로 아래 aaa.png라는 확장자를 포함하고 있었다. PNG 이미지로 가장하고 있었지만, 실제는 윈도우 PE(Portable Executable)였다. 이 공격은 윈도우를 개발 환경으로 사용하는 루비 개발자가 표적이었다.

이 악성 패키지에 포함된 생성 파일(Makefile)은 루비 설치 도구가 설치 동안 aaa.png를 aaa.exe로 이름을 바꿔 실행하도록 명령했다. 이는 사용자의 개입 없이 이뤄지는 작업이었다. Aaa.exe는 Ruby2Exe로 만든 루비 프로그램으로 난독화 VBS(Visual Basic Script)를 배포했다. VBScript는 윈도우 시스템에서 기본으로 지원되는 스크립팅 언어다.

VBS 파일은 프로그램 데이터 디렉터리에 Software Essentials.vbs로 저장되었으며, 시스템을 리부트할 때마다 자동으로 시작되도록 설정되어 있었다. 계속해서 컴퓨터 클립보드를 감시, 비트코인 지갑 주소와 일치하는 문자열 패턴을 찾아, 이 문자열을 공격자에게 속한 지갑 주소로 대체하도록 만들어진 스크립트였다.

피해자가 비트코인 거래를 하면서 웹사이트 등에서 수령자의 지갑 주소를 복제할 때마다 복사한 주소가 공격자의 것이 되었다는 의미다. 과거에도 암호화폐 사용자를 표적으로 한 클립보드 하이재킹 공격이 있었다. 그러나 이 경우에는 큰 성공을 거두지 못해 악성 지갑에서 거래가 발생하지 않았다.

하지만 감염을 시킨 방법 자체가 효과적이지 않았다는 의미는 아니다. 공격이 제한적이었다. 마침 레버싱랩스가 루비젬스를 분석한 것, 공격자의 표적이 윈도우 시스템을 사용하고, 비트코인 거래를 한 루비 개발자가 된 이유다.


타이포스쿼팅 방어책을 무력화한 공격

atlas-client(하이픈 부호)라는 악성 잼은 2,100여 차례 다운로드됐다. atlas_cleint(밑줄 부호)라는 적법한 젬의 총 다운로드 횟수의 약 1/3에 해당한다. 700여 악성 패키지 모두 공격자가 적법한 패키지 이름을 복사해, 하이픈 부호를 밑줄 부호로 바꾼, 또는 밑줄 부호를 하이픈 부호로 바꾼 오자 이름을 갖고 있었다.

과거 사고에 대한 대응책으로 편집 거리(Levenshtein distance) 규칙이 추가된 타이포스쿼팅 방지책을 사용하고 있던 루비젬스가 패키지를 차단하지 않은 이유가 여기에 있다. 레버싱랩스가 발견한 악성 잼들의 다운로드 횟수는 9만 5,000여 건에 달한다.

페리신은 “현재 탐지 기능이 도입되어 있을 수 있지만, 공격자가 알고리즘이 놓친 패턴을 발견한 것으로 판단된다. 루비젬스 리포지터리에서 이런 공격을 탐지한 것이 3번째이다. 우리는 소프트웨어 공급망을 보안 통제책이 필요한 아주 큰 공격 표면으로 판단하고 있다. 이번 사고는 개발자가 표적이 될 수 있다는 것을 확인시켜줬다. 의심하지 않는 사용자를 표적으로 하는 공격을 감행할 때 매개체, 수단으로 이용할 수 있는 표적이다”라고 말했다. editor@itworld.co.kr


X