백도어

컴퓨터 시스템(또는 암호화 시스템, 알고리즘)의 백도어(영어: backdoor)는 일반적인 인증과 암호화를 우회(bypassing)해 원격 접속 및 암호화된 텍스트에 대한 권한을 취득하는 등 은밀히 악성코드를 실행하는 전형적인 방법이다. 백도어는 설치된 프로그램의 형태를 취하기도 하고, 기존 프로그램 또는 하드웨어의 변형일 수도 있다. 일반적으로 CCTV에 깔려서 정보를 빼어갈 수도 있다. 백도어의 위협은 다중 사용자와 네트워크 운영 체제가 널리 받아들여지면서 표면화되었다. 피터슨과 턴은 1967년 AFIPS 학회에 논문을 발표한 바 있다. 여기서 지적한 능동 침투 공격 형태는 "함정문 trapdoor" 침투점을 이용하여 보안 기능을 우회하고 데이터에 직접 접근을 허용하는 것이었다. 함정문 trapdoor이라는 단어는 분명히 더 최근의 백도어의 정의와 일치한다. 그러나 공개 키 암호화와 함께 함정문이라는 단어는 다른 의미를 가지게 되었다. 1970년, 더욱 일반적으로 그러한 보안 누설이 랜드 연구소 태스크 포스 리포트에서 더 길게 논의되었다. 로그인 시스템의 백도어는 시스템에 접근 할 수 있는 사용자 이름과 암호를 하드 코드(데이터를 소스 코드에 직접 삽입) 형태를 띌 수 있다.잘 알려진 이런 종류의 예는 1983년 영화 워게임에 나오는 것으로 WOPR 컴퓨터 시스템을 만든 사람이 하드 코드 암호 (죽은 아들의 이름)를 삽입하여 사용자가 시스템과 문서화되지 않은 부분 (특히 비디오 게임처럼 보이는 시뮬레이션 모드와 인공지능과의 직접 상호 작용)에 접근할 수 있게 하는 것이었다. 2003년 탄로난 리눅스 커널에 백도어를 심으려 했던 시도가 보여 주는 것은 그러한 코드 변경이 얼마나 교묘할 수 있는가 하는 것이다. 이 경우에는 오타인 것처럼 보이게 단 두 줄을 변경한 것이었지만 실은 호출자가 sys_wait4 함수의 루트 권한 접근을 허용하는 것이었다. 전용 소프트웨어 (소스 코드가 공개되지 않은 소프트웨어)를 사용하는 시스템에는 얼마나 많은 백도어가 있는지는 잘 알려져 있지 않지만 그럼에도 불구하고 자주 노출된다. 프로그래머들은 심지어 무해한 코드인 이스터에그를 대량으로 설치하기도 하는데, 그러한 경우 실제로 허용은 안되더라도 공식적으로는 묵인된다. 또한 소스 코드 수정 없이도 백도어를 만드는 것도, 심지어 컴파일 후에 수정하는 것도 가능하다. 이는 컴파일러를 다시 작성하여 소스 코드를 컴파일 할 때 특정 부분에 백도어를 삽입시키는 것이다. 그래서 사용자가 특정 입력을 제공하면 어떤 (아마도 문서화 되지 않은) 프로그램의 기능에 접근할 수 있게 된다. 이 공격은 처음 켄 톰슨(리치와 함께 C 언어를 만든)이 설명한 것으로 잘 알려진 논문 Reflections on Trusting Trust에 나와 있다. 많은컴퓨터 웜, 예를 들어 Sobin과 Mydoom은 백도어를 대상 컴퓨터에 설치한다. (일반적으로 광대역 망에 연결된 PC로 불안전한 마이크로소프트 윈도우와 아웃룩을 실행하는 PC가 표적이 된다.) 그러한 백도어는 스팸 메일을 감염된 컴퓨터로부터 발송하게 된다. 다른 것, 예를 들어 소니 BMG의 루트킷 프로그램은 2005년 말까지 수백만장의 음악 CD에 조용히 배포되었는데, 이는 디지털 권리 관리 또는 데이터 수집 에이전트로서의 의도를 가지고 있어서 중앙 서버를 주기적으로 접촉하였다. 전통적인 백도어는 대칭적 백도어다. 백도어를 찾은 사람은 누구나 사용할 수 있었다. 비대칭 백도어라는 표현은 96년 소개되었는데, 백도어의 전체 구현이 (출판, 역공학 등에 의해) 공개되더라도 기획한 공격자만 사용될 수 있는 것이다. 또한 이러한 비대칭적 백도어의 존재는 블랙박스 쿼리로는 전산적으로 추적이 불가능하다. 이 종류의 공격은 kleptography 라는 용어로 표현하는데 소프트웨어, 하드웨어 (스마트카드), 또는 둘의 조합으로 수행될 수 있다. 비대칭 백도어 이론은 이제는 cryptovirology라 부르는 더 큰 분야의 일부이다. 영과 융은 RSA 키 생성 알고리즘에도 OpenSSL RSA 백도어라는 실험적인 비대칭 백도어를 설계하였다. 켄 톰슨의 "Trusting Trust에 대한 고찰 Reflections on Trusting Trust"은 블랙박스 백도어 문제를 기술한 최초의 주요 논문으로 신뢰는 상대적인 것이라는 것을 지적하였다. 아주 기발한 백도어 기작을 서술하였는데, 사람들이 (사람이 쓴) 소스 코드만 검토할 뿐, 컴파일한 기계어 코드는 검토하지 않는다는 사실에 기반한 것이었다. 컴파일러라는 프로그램이 소스코드로부터 기계어 코드를 생성하는데 사용되는데 컴파일러는 솔직하게 시키는 일만 할 것이라고 보통 믿어지고 있다. 톰슨의 글은 변형된 유닉스 C 컴파일러에 대해서 말하고 있는데 이는 다음과 같은 동작을 할 수 있다: 로그인 프로그램이 컴파일 되고 있음을 알아차리면 보이지 않는 백도어를 유닉스 로그인 명령에 둔다. 또한 미래의 컴파일러를 컴파일 할 때 이 기능을 들키지 않게 추가한다. 컴파일러 자체가 컴파일된 프로그램이기 때문에 사용자가 이러한 작업을 하는 기계어 코드를 알아차릴 가능성은 극히 낮다. (두 번째 작업으로 컴파일러의 소스 코드는 깨끗해 보일 것이다.) 더 나쁜 것은 톰슨의 개념 증명 구현판인 변형된 컴파일러가 분석 프로그램 (디스어셈블러) 또한 변형하여 일반적인 방법으로 이진 코드를 분석한 이들은 누구도 실제로 작동하는 코드를 볼 수 없고 엉뚱한 다른 코드를 보게 된 것이다. 이 버전은 공식적으로는 세상에 풀려난 적은 없다. 그러나 최소한 한건의 백도어 사용이 기록되어 있다. 일단 시스템이 Trusting Trust 컴파일러와 같은 백도어 또는 트로이 목마에 영향을 받으면 "정당한" 사용자가 시스템의 제어권을 되찾는 것은 매우 어렵다. 그러나 Trusting Trust 공격의 약점이 몇가지 제안되었다. 예를 들어 충분히 동기 부여된 사용자는 컴파일러를 사용하기 전에 고통을 감수하고 기계어 코드를 검토할 것이다. 위에서 언급한 대로 트로이 목마를 감추는 방법이, 예를 들어 역어셈블러를 변조하는 것처럼 존재한다; 그러나 이러한 방어 수단에 맞서는 방법도 있다. 예를 들어 자신만의 역어셈블러를 처음부터 만들어 감염된 컴파일러가 알아차리지 못하게 하는 것이다. 그러나 이러한 제안은 일반적으로 비실용적이다. 사용자가 컴파일러를 믿지 못한다면 아예 사용하지 않는 것이 물들지 않았다고 믿어지는 도구만 써서 이진 코드를 검토하는 것 보다는 나을 것이다. 컴파일러가 감염되었다고 심각하게 생각하지 않는 사용자는 방대한 작업을 감당하지 않을 것이다. 데이비드 A 휠러는 이 공격에 대한 대응 수단을 제안하여 "분산 이중 컴파일"이라 불렀다. 백도어에는 논리 폭탄(logic bomb), 웜(worm), 트로이 목마(trojan horse) 등이 있다. 그러나 이들처럼 악의적으로 만들어진 것 말고도, 새로 개발한 시스템을 테스트하기 위해 개발자가 삽입하는 백도어도 존재할 수 있다.