Home > 열린마당 > 공개SW 소식

공개SW 소식

2021.08.18.
ⓒZDNet Korea / 김윤희

 

삼성전자 산하 연구소 삼성리서치가 오픈소스에서 미처 걸러지지 못하고 남은 패스워드 등 개인정보를 탐지할 수 있는 도구를 개발, 오는 10월 공개할 예정이다.

오픈소스에 대해 이같은 기능을 제공하는 도구들이 현존하나, 안심하고 쓸 수 있을 만큼 성능이 고도화되지 못했다는 평가를 받고 있다. 기존 도구들보다 높은 성능을 구현하기 위해 직접 평가 데이터셋을 만들고, 이를 토대로 일정한 형태를 갖지 않아 검출하기 어려운 개인정보들도 검출할 수 있게 도구를 개발했다는 설명이다.

심우철 삼성리서치 프로는 지난 17일 온라인 개최된 '삼성 보안 기술 포럼(SSTF) 2021'에서 이같이 밝혔다.

오픈소스 내 개인정보 탐지 도구 외 리눅스 커널에 대한 메모리 취약점 공격 방어,  클라우드 서비스와 생체인증 연계 방법 등 삼성리서치 시큐리티 팀의 최근 보안 기술 연구 내용도 이날 포럼에서 함께 소개됐다.

 

■고품질 데이터셋으로 오픈소스 검증 도구 성능 ↑

오픈소스가 소프트웨어(SW) 개발 과정에서 활발히 쓰이고 있지만, 개인정보들이 포함된 채로 공개되는 유출 사고가 발생하고 있다. 심우철 프로는 이런 사고를 막기 위해 오픈소스 내 개인정보 등 기밀값 탐지 도구들이 공유되고 있지만, 오탐이 많다는 이유로 현재 이런 도구들이 기밀값이 확실한 경우만 탐지하는 편이라고 언급했다.

이에 패스워드처럼, 일정한 패턴이 없어 확실하게 탐지하기 어려운 기밀값도 분석해낸 평가 데이터셋을 사용하면 소스코드에서 보다 정밀하게 기밀값을 탐지해낼 수 있을 것으로 봤다.

삼성리서치 시큐리티 팀은 이런 데이터셋을 구축하기 위해 기밀값이 포함된 리포지토리를 검색해 살폈다. 그 결과 300여개 리포지토리의 수백만 라인에서 실제 미보호된 기밀값으로 추정되는 내용이 포함된 8천여 라인을 발견했다.

이후 데이터셋에서 미보호된 기밀값을 확인할 수 없도록 조치해 공격자의 악용을 막고자 했다. 심 프로는 "미보호된 기밀값이 발견된 오픈소스를 추정할 수 있는 정보를 최소화하고, 실제 기밀값이 적힌 부분을 변경했다"며 "파일 경로 등의 정보를 모두 삭제하고 실제 기밀값의 패턴을 유지하면서도 임의로 재생성한 값으로 대체해 넣었다"고 설명했다.

데이터셋을 공개하기 전 각 오픈소스 메인테이너에게 실제 기밀값 여부 확인 및 이에 대한 추가 조치를 요청하는 과정도 거쳤다.

심 프로는 "저희가 모은 데이터에  어떤 확장자들이 있는지, 기밀값은 어떤 형태들로 있는지 등을 확인할 수 있으며 추가 분석을 위한 통계 데이터도 마련했다"며 "데이터셋과, 이를 기존 도구의 높은 미탐율을 개선한 기밀값 탐지 도구를 개발 중이고, 이를 10월에 소스코드와 함께 오픈소스화하려고 준비 중"이라고 밝혔다.

 

■'포인터 인증' 난이도 높여 메모리 취약점 공격 예방

유성배 삼성리서치 프로는 메모리 손상 취약점 기반 공격을 방어하기 위해 고안한 기술 방식을 소개했다.

유성배 프로는 "공격자는 '버퍼 오버 플로', '유스 애프터 프리' 등 메모리 손상 버그를 여러 개 연결해 해킹 도구로 조합한다"며 "만들어진 도구로 원하는 위치의 메모리를 읽거나 써서 시스템 보호 영역을 원하는대로 변경하고, 루트 권한을 획득하는 등의 공격을 수행하는 상황"이라고 말했다.

메모리 손상 취약점 공격 중 공격자가 임의로 코드를 수정하는 공격은 위험성이 크지만, 방어하기도 손쉽다. 코드 쓰기를 금지하면 되기 때문이다. 이런 방식은 많은 하드웨어에 도입돼 있으며, 윈도에서 제공되는 '데이터실행방지(DEP)'도 이런 기능 중 하나다.

이를 제외하면 코드 실행 순서를 변조하는 공격 가능성이 남는다. 함수가 반환되는 주소를 공격자가 원하는 위치로 변경, 결과적으로 공격자가 원하는 위치의 코드를 실행할 수 있게 되는 식이다. 삼성리서치 시큐리티팀은 이 공격을 차단할 방법을 연구, ARM에서 지원하는 '포인터 인증' 기술을 고도화하는 방안을 찾았다.

포인터 인증은 메모리 공간의 주소를 나타내는 '포인터'가 변조되지 않았는지 하드웨어적으로 검증하는 기술이다. 인증에는 대상 포인터와 키 값, 이 두 가지 외 다른 결과값이 계산되도록 하는 요소 '컨텍스트' 세 가지가 사용된다. 이를 조합해 독특한 코드를 만들고, 이를 포인터 값과 결합하는 '사인' 과정을 거친다. 포인터를 사용하기 전 결합된 코드값을 보고 포인터의 변조 여부를 검증하게 되는데, 값이 중간에 바뀔 경우 공격으로 탐지해내는 식이다.

이런 포인터 인증에도 보안 허점이 존재한다. 사인된 포인터를 바꿔치기 하는 '리플레이' 공격과 사인되기 전 포인터를 바꿔치기 하는 '위조' 공격이다. 공격자가 같은 컨텍스트와 키를 사용하기 때문에 포인터 인증 과정을 통과할 수 있게 된다.

위조 공격의 경우 사인 전 포인터를 메모리 상에 올리지 않고, 레지스터만 사용하는 식으로 대응가능하다. 리플레이 공격을 막으려면 컨텍스트를 최대한 다양하게 지정해 결과값이 겹치지 않게 할 필요가 있다. 

이를 위해 삼성리서치가 개발한 기법이 '페이스드 컨텍스트(Phased Context)'다. 페이스드 컨텍스트는 먼저 컨텍스트 분석기를 통해 소스코드 어떻게 변경하면 컨텍스트를 다양하게 구성할 수 있을지에 대해 개발자에게 가이드라인을 제공한다. 이후 컴파일 과정에서 바이너리 코드의 포인터를 사인하고 검출하는 코드를 자동으로 추가한다. 마지막으로 전체 바이너리의 취약점, 특히 위조 공격을 수행할 만한 부분이 있는지를 정적 분석기가 한 번 더 검증하는 과정을 거친다.

컨텍스트를 다양하게 만드는 과정은 크게 네 단계까지 나아갈 수 있다. ▲함수 타입 ▲포인터가 속한 구조체 및 변수의 타입 ▲구조체 내에서 컨텍스트로 사용할 수 있는 값 ▲포인터 생성 지점에서 사용 지점까지의 거리를 컨텍스트로 쓰게 된다. 유 프로는 "네 단계를 다 거치면 공격 가능한 포인터가 거의 남아있지 않게 된다"고 했다.

삼성리서치는 이런 방식을 리눅스 커널에 적용한 'PAL(Pointer Authentication Enhanced Linux)'을 만들었다. 유 프로는 "같은 컨텍스트로 사인된 포인터 개수가 적을수록 리플레이 공격으로부터 안전하다"고 첨언했다.
(후략)

 

[원문 기사 : https://zdnet.co.kr/view/?no=20210818153904 ]

 

※ 본 내용은 (주)메가뉴스 (https://zdnet.co.kr/)의 저작권 동의에 의해 공유되고 있습니다.
© 2020 ZDNET, A RED VENTURES COMPANY. ALL RIGHTS RESERVED. 무단전재 및 재배포 금지.

맨 위로
맨 위로