소프트웨어 포렌식

Software forensics

소프트웨어 포렌식이란 소프트웨어 소스 코드바이너리 코드를 분석해 지적재산권 침해나 도난이 발생했는지 여부를 판단하는 과학이다. 소프트웨어 특허, 저작권, 영업비밀 등의 문제로 기업이 분쟁을 벌일 때 소송, 재판, 해결의 중심이다. 소프트웨어 포렌식 도구는 코드를 비교하여 상관관계를 결정할 수 있는데, 이는 소프트웨어 포렌식 전문가를 안내하는 데 사용할 수 있는 조치다.

소프트웨어 포렌식 이전 방법

과거 코드 비교 방법에는 해싱, 통계 분석, 텍스트 일치, 토큰화 등이 있었다. 이 방법들은 소프트웨어 코드를 비교하고 복사가 일어났는지 여부를 나타내는 단일 측정치를 생산했다. 그러나 이러한 조치는 결과가 정확하지 않고, 코드의 단순한 대체에 의해 알고리즘이 쉽게 속아넘어갈 수 있으며, 복사 이외의 이유로 코드가 유사할 수 있다는 사실은 고려하지 않았기 때문에 법정에서 인정될 만큼 충분히 정확하지 않았다.

저작권 침해

소프트웨어 도구를 사용하여 코드를 비교하여 상관관계의 양을 결정한 후, 전문가는 상관관계가 있는 코드가 제3자 코드, 코드 생성 도구, 일반적으로 사용되는 이름, 공통 알고리즘, 공통 프로그래머 또는 복사 때문이라는 것을 결정하기 위해 반복 필터링 프로세스를 사용할 수 있다. 그 상관관계가 복사 때문이고 복사기가 권리 소유자의 권한을 가지고 있지 않다면, 저작권 침해가 발생했다.

영업비밀보호 및 침해

소프트웨어에는 영업 비밀이 포함될 수 있으며, 이는 기업에 경쟁 우위를 제공한다. 영업비밀 절도를 판단하기 위해 동일한 도구와 프로세스를 사용하여 저작권 침해를 탐지할 수 있다. 만약 코드가 권한 없이 복사되었고, 그 코드는 통상적으로 알려져 있지 않으며, 비즈니스는 이를 비밀로 유지하며, 그 비밀이 비즈니스에 대한 가치를 유지한다면, 복사된 코드는 영업비밀 도용에 해당한다.

영업비밀 도용은 또한 문자 그대로 코드를 복사하지 않고도 코드 기능을 이용할 수 있다. 코드 기능성을 비교하는 것은 어떤 알고리즘으로도 합리적인 시간 내에 아직 달성되지 않은 매우 어려운 문제다. 이러한 이유로, 코드 기능성의 도용 발견은 여전히 대부분 수작업 과정이다.

특허침해

영업비밀 기능성과 마찬가지로 소프트웨어 특허가 특정 소스 코드가 아닌 일반 구현을 포괄하기 때문에 현재 소프트웨어 특허침해를 과학적으로 탐지하는 것은 불가능하다. 예를 들어 특허받은 발명을 구현하는 프로그램은 여러 가지 가능한 프로그래밍 언어로 작성될 수 있으며, 다른 함수 이름과 변수 이름을 사용하고 다른 시퀀스로 연산을 수행할 수 있다. 소프트웨어에는 발명을 구현하는 방법의 조합이 너무 많아서 아무리 강력한 현대 컴퓨터라도 특허를 침해할 수 있는 코드의 모든 조합을 고려할 수는 없다. 이 작업은 여전히 인간의 지식과 경험을 활용해 인간 전문가에게 맡겨져 있지만 소프트웨어 포렌식스(SWF)의 상당수가 알고리즘을 찾거나 프로세스를 간소화해 자동화를 시도하는 것은 문제다.

주관적 증거 이전의 객관적 사실

법의학 분석의 중요한 규칙 중 하나는 객관적인 사실을 먼저 고려해야 한다는 것이다. 코드를 배포하는 회사와 코드를 작성한 프로그래머에 대한 정보를 찾기 위해 코드의 코멘트를 검토하거나 인터넷을 검색하는 것은 상관관계와 관련된 객관적인 사실을 고려한 후에야 유용하다. 일단 법의학적 도구와 절차를 사용하여 분석이 수행되면, 분석가들은 코드의 논평과 같은 주관적인 증거를 보기 시작할 수 있다. 만약 그 주관적 증거의 정보가 객관적 분석과 상충된다면, 분석가들은 주관적 증거를 의심할 필요가 있다. 복사를 위장하기 위해 복사가 이뤄진 뒤 소스 코드에 추가한 가짜 저작권 고지서나 오픈소스 통지서, 프로그래머 이름 등은 실제 코드 도용 사례에서 드물지 않다.

참조