2020-08-05 14:00 (수)
소스 코드 작성자를 정확하게 식별하는 머신러닝 알고리즘 개발
상태바
소스 코드 작성자를 정확하게 식별하는 머신러닝 알고리즘 개발
  • 배수연 기자
  • 승인 2018.08.30 18:09
이 기사를 공유합니다

20180827141453615.jpg
▲소스 코드 또는 컴파일된 바이너리의 저자를 식별하는 머신러닝 알고리즘이 개발됐다(출처=123RF)

미국 드렉셀대학 컴퓨터 과학과 부교수인 레이젤 그린스타트와 조지워싱턴대학 부교수인 아일린 캘리스칸이 원시 소스 코드 또는 컴파일된 바이너리의 저자를 정확하게 식별하는 머신러닝 알고리즘을 개발했다.

이들이 만든 실험적인 알고리즘은 주어진 코드에서 발견된 특징을 확인한 후 소프트웨어 개발자를 구별하는 특성만이 남을 때까지 특징을 하나씩 제거한다. 수십만 개의 기능 중 최종적으로 남는 목록은 약 50개 정도일 수 있다.

그린스타트와 캘리스칸은 코드 형식 지정과 같은 저수준 기능에 의존하는 대신 AST(Abstract Syntax Trees) 기법을 사용했다. 이것은 임의의 구성 요소가 아닌 코드의 기본 구조를 강조하는 것으로, 예를 들어 각 단락의 첫 번째 줄이 아닌 문장 구조 자체를 파악하는 기술이라고 볼 수 있다.

이 새로운 방법을 활용하기 위해서는 알고리즘을 훈련시킬 샘플이 필요하다. 그러나 하나의 샘플만 사용할 수는 없다. 소스 코드 저장소인 깃허브(GitHub) 사이트를 이용하면 매우 정확한 샘플을 얻을 수 있다.

연구진은 이 기술이 효과적인지 입증하기 위해 구글(Google)의 연례 코드 잼(Code Jam) 경쟁에서 나온 코드 샘플을 사용했다. 이들은 머신러닝 알고리즘을 사용해 각 그룹 100명의 개별 프로그래머를 96%의 정확도로 구분했다. 샘플은 각 프로그래머마다 8개를 사용했다. 600명의 개별 프로그래머를 대상으로 머신러닝 알고리즘을 테스트했을 때도 정확도는 83%로 높은 수준이었다.

이 알고리즘은 프로그래밍을 배우는 학생이 과제로 제출한 코드가 어디선가 도용된 것인지, 아니면 고용된 프리랜서 프로그래머가 다른 사람의 코드를 이용했는지 파악하는 데 사용될 수 있다. 또 보안 연구원들이 이 알고리즘을 이용해 누가 특정 유형의 멀웨어를 만들었는지 확인할 수 있다.