컴퓨터 바이러스

컴퓨터 바이러스(, )는 스스로를 복제하여 컴퓨터를 감염시키는 컴퓨터 프로그램이다. 복제 기능이 없는 다른 종류의 악성 코드, 애드웨어, 스파이웨어와 혼동하여 잘못 쓰이는 경우도 있다. 바이러스는 한 컴퓨터에서 다른 컴퓨터로(일부 형식의 실행 코드로) 확산할 수 있다. 이를테면 사용자는 인터넷이나 네트워크를 통하여, 또는 플로피 디스크, CD, DVD, USB 드라이브와 같은 이동식 매체를 통하여 바이러스를 전파할 수 있다. 바이러스는 네트워크 파일 시스템이나, 다른 컴퓨터를 통해 접근하는 파일 시스템 상의 파일을 감염시킴으로써 다른 컴퓨터로의 확산 가능성을 높일 수 있다.
역사.
컴퓨터 바이러스 개념이 처음 사용된것은 1972년 SF소설 When Harlie Was One에서이다. 
1970년대에 인터넷의 선구자인 아파넷에서 크리퍼 바이러스가 처음 발견됐으며 이것이 최초의 바이러스로 기록되어 있다. 크리퍼는 실험적인 자기 복제 프로그램이었으며 1971년에 BBN에서 밥 토머스가 작성한 것이다. 크리퍼는 아파넷을 사용하여 TENEX 운영 체제를 사용하는 DEC PDP-10 컴퓨터들을 감염시켰다. 크리퍼는 아파넷을 통한 접근 권한을 얻었고 스스로를 "I'm the creeper, catch me if you can!"(나는 크리퍼다, 잡을 수 있다면 나 잡아봐라!)라는 메시지가 있는 원격 시스템에 복사시켰다. 뒤에 리퍼(Reaper)라는 프로그램이 개발되어 크리퍼 바이러스를 지우게 되었다.
개인용 컴퓨터에서 발견된 최초의 바이러스는 (c)브레인이라고 하는 부트 섹터 바이러스였으며 1986년에 파루크 앨비 형제가 만들었다.
1990년대 중반에 매크로 바이러스가 일상화되었다. 이 바이러스 대부분이 워드와 액셀과 같은 마이크로소프트 프로그램을 위한 스크립팅 언어로 기록되어 마이크로소프트 오피스를 통하여 문서와 스프레드시트를 감염시키며 퍼져나갔다. 워드와 액셀이 OS X에서도 사용할 수 있었으므로 이 대부분이 매킨토시 컴퓨터에도 퍼질 수 있었다.
2002년에 크로스 사이트 스크립팅을 사용하여 확산된 바이러스가 처음 보고되었으며 학술적으로는 2005년에 증명되었다. 마이스페이스와 야후와 같은 웹사이트를 통한 크로스 사이트 스크립팅 바이러스의 여러 사례가 있었다.
감염 과정.
스스로를 복제하려면 바이러스는 코드 실행과 메모리로의 기록을 허가받아야 한다. 이러한 까닭에 수많은 바이러스들은 정상적인 프로그램들의 일부일 수 있는 실행 파일에 스스로 첨부해 들어간다. 사용자가 감염된 프로그램을 실행하려고 하면 바이러스 코드가 동시에 실행될 수 있다. 바이러스들은 실행될 때 두 가지 종류로 나뉠 수 있다. 비상주 바이러스들은 즉시 감염될 수 있는 다른 호스트들을 찾아 대상을 감염시키며 끝내 감염된 응용 프로그램에 제어권을 넘긴다. 상주 바이러스들은 이들이 위치한 호스트를 검색하지 않으나 실행을 할 때 스스로를 메모리에 상주시켜 호스트 프로그램에 제어권을 넘긴다. 바이러스는 백그라운드 환경에서 동작하며 이 파일들이 다른 프로그램이나 운영 체제 자체에서 접근하면 새로운 호스트들을 감염시켜 버린다.
비상주 바이러스.
비상주 바이러스는 검색자 모듈(finder module)과 복제 모듈(replication module)로 이루어져 있다고 생각하면 된다. 검색자 모듈은 감염을 시킬 새로운 파일들을 찾는 데 치중한다. 검색자 모듈이 각 새로운 실행 파일과 마주치면 복제 모듈을 호출하여 해당 파일을 감염시킨다.
상주 바이러스.
상주 바이러스는 비상주 바이러스가 이용하는 것과 비슷한 복제 모듈을 포함하고 있다. 그러나 이 모듈은 검색자 모듈을 통해 호출되지 않는다. 이 바이러스는 일단 실행하게 되면 복제 모듈을 메모리에 상주시키며 운영 체제가 특정한 운영을 수행하기 위해 호출될 때마다 이 모듈이 실행하게끔 한다. 이 복제 모듈은 이를테면 운영 체제가 파일을 실행할 때마다 호출된다. 이 경우 바이러스는 컴퓨터 상에서 실행되는 정상적인 모든 프로그램들을 감염시킨다.
상주 바이러스는 빠른 감염자(fast infector)와 느린 감염자(slow infector)로 나뉘기도 한다. 빠른 감염자는 가능한 많은 파일에 감염하도록 고안되어 있다. 이를테면 빠른 감염자는 접근을 하는 모든 잠재적인 호스트 파일을 감염시킬 수 있다. 바이러스 검사 소프트웨어를 사용하고 있을 때에는 특별한 문제를 드러내게 되는데, 이는 시스템 전체 검색시 바이러스 검사 프로그램이 컴퓨터 상의 잠재적인 모든 호스트 파일에 접근하기 때문이다. 바이러스 검사 프로그램이 이러한 바이러스가 메모리에 존재한다는 사실을 눈치채지 못하면 바이러스는 바이러스 검사 프로그램에 타고 올라가 바이러스 검사를 받는 모든 파일들을 감염시켜버린다. 빠른 검색자는 바이러스가 빨리 퍼지는 데 중점을 두었다. 이 방식에서 보이는 단점은 수많은 파일을 감염시킬 때 이를 빨리 감지해낼 수 있다는 점인데 그 까닭은 바이러스가 컴퓨터를 느리게 만들거나 바이러스 검사 소프트웨어가 알아챌 수 있을 만큼 수많은 의심스런 동작을 수행하기 때문이다. 한편 느린 감염자는 비정기적으로 호스트를 감염시키는 것이 목적이다. 이를테면 일부 느린 감염자는 일들이 복사될 때 파일을 감염시키기만 한다. 느린 감염자는 이러한 동작을 최대한 줄임으로써 감지를 피하도록 설계되어 있다. 이들은 컴퓨터를 눈에 띄게 느리게 할 가능성이 거의 없으며 프로그램에 의한 의심스러운 동작을 바이러스 검사 프로그램이 감지할 때 비정기적으로 바이러스 검사 프로그램이 뜨게 만든다. 그러나 이 느린 감염자 접근은 매우 성공적으로 보이지는 않는다.
감염되는 위치.
바이러스가 감염되는 위치는 아래와 같다. 아래의 내용이 모든 것을 포함하는 것은 아니다:
취약성과 대응책.
바이러스에 대한 운영 체제의 취약성.
생물의 개체 하나하나가 유전자 다양성을 지니고 있어서 질병으로 인하여 죽어갈 가능성을 줄인 것 같이 네트워크 상의 소프트웨어 시스템의 다양성도 이와 비슷하게 바이러스가 벌이는 잠재적인 파괴를 제한한다.
이것이 마이크로소프트사는 데스크톱 운영 체제와 오피스 제품군의 시장 우위를 차지하였던 1990년대에 특별한 개념이 되었다. 마이크로소프트 소프트웨어(특히 마이크로소프트 아웃룩, 인터넷 익스플로러와 같은 네트워킹 소프트웨어)를 이용하는 사람들은 특히 바이러스 확산에 취약하다. 마이크로소프트 소프트웨어는 데스크톱 시장의 주도성으로 바이러스 제작자들이 표적으로 삼았고 바이러스 제작자가 이용하는 허점과 수많은 오류를 비롯하여 많은 비판을 받기도 하였다. 통합형, 개별형 마이크로소프트 응용 프로그램들(이를테면 마이크로소프트 오피스)과 파일 시스템에 접근할 수 있는 스크립팅 언어로 된 응용 프로그램(이를테면 비주얼 베이직 스크립트 및 네트워킹 기능이 있는 응용 프로그램)이 특히 취약하다.
윈도우가 이제껏 바이러스 제작자들에게 가장 잘 알려진 운영 체제가 되었지만 일부 바이러스는 아직도 다른 운영 체제에 존재한다. 서드 파티 프로그램이 실행하는 것을 허용하는 운영 체제는 이론적으로 바이러스를 실행할 수 있다. 일부 운영 체제는 다른 운영 체제에 비해 덜 안정적이다. 유닉스 기반 운영 체제 (및 윈도 NT 기반 플랫폼의 NTFS 인식 프로그램)는 사용자들이 보호된 메모리 공간 안에서만 실행할 수 있도록 허용하고 있다.
인터넷 기반 연구에서는 사람들이 자발적으로 특정한 단추를 눌러 바이러스를 다운로드하는 사례가 있었음을 밝혀내었다. 보안 분석가 디디에 스티븐스(Didier Stevens)는 6개월 동안 구글 애드워즈에 "Is your PC virus-free? Get it infected here!"(여러분의 PC는 바이러스에서 해방되어 있습니까? 이 곳에서 감염되어 보십시오)라며 광고 운동을 벌였다. 결과는 무려 409번 클릭이었다.
소프트웨어 개발의 역할.
소프트웨어가 시스템 리소스의 허가되지 않은 이용을 막기 위한 특별한 기능을 포함하고 있으므로 수많은 바이러스들은 확산을 위하여 시스템이나 응용 프로그램 안의 소프트웨어 버그를 이용하여야 한다. 수많은 버그를 양산하는 소프트웨어 개발 전략은 일반적으로 잠재적인 악의적 이용을 부추길 수 있다.
바이러스 검사 소프트웨어 및 기타 방지 대책.
수많은 사용자들은 실행 파일을 다운로드 받거나 실행한 뒤에, 알려져 있는 바이러스를 찾아내어 없앨 수 있는 바이러스 검사 소프트웨어를 설치한다. 바이러스 검사 소프트웨어가 바이러스를 찾아내는 데에는 두 가지 방식이 있다. 첫째로는 가장 흔한 바이러스 검사 방식으로, 바이러스 서명 정의 목록을 사용하는 것이다. 이것은 컴퓨터 메모리의 내용(램, 시동 섹터), 고정 및 이동식 드라이브(하드 드라이브, 플로피 드라이브)에 저장된 파일을 검사하고 알려진 바이러스의 서명 데이터베이스와 해당 파일을 비교함으로써 수행하게 된다. 이 감지 방식의 단점으로는 사용자가 최신 바이러스 정의 업데이트에 속한 바이러스로부터만 보호를 받을 수 있다는 것이다. 두 번째 방식으로는 발견적 알고리즘을 사용하여 컴퓨터 행위에 따라 바이러스를 찾아내는 것이다. 이 방식은 보안 회사가 서명을 작성할 바이러스까지도 검색하는 기능을 갖추고 있다.
일부 바이러스 검사 프로그램은 비슷한 방식으로 '눈에 보이는' 보낸 편지, 받은 편지뿐 아니라 열려 있는 파일을 검사할 수 있다. 이를 "실시간 검사"(on-access scanning)라고 부른다. 사용자들은 소프트웨어를 주기적으로 업데이트하여 보안 허점을 보완하여야 한다. 바이러스 검사 소프트웨어는 주기적으로 업데이트하여 최신 위협으로부터 보호받도록 한다.
복구 방식.
컴퓨터가 바이러스에 더럽혀지면 완전히 운영 체제를 다시 설치하지 않고서는 일반적으로 같은 컴퓨터를 사용하여 계속하는 것이 안전하지 않다. 그러나 컴퓨터가 바이러스에 걸렸어도 이에 대비한 복구 옵션이 수없이 존재한다. 이러한 기능은 바이러스의 종류의 심각성에 따라 달라진다.
바이러스 제거.
윈도우 미, 윈도우 XP, 윈도우 비스타, 윈도우 7, 윈도우 8에는 시스템 복원이라는 도구가 있어서 레지스트리와 중요한 시스템 파일을 이전 검사 지점으로 돌릴 수 있다. 바이러스가 시스템을 붙잡아 컴퓨터 전원을 강제로 껐다 켜면 그 즉시 시스템 복원을 보여 줄 것이다. 바이러스가 복원 파일을 손상시키지 않았고 이전 복원 지점에 존재하지도 않는다면 이전 날의 복원 지점을 선택해도 무관하다. 그러나 일부 바이러스들은 시스템 복원과 다른 중요한 도구(작업 관리자, 명령 프롬프트)를 사용하지 못 하게 만드니 주의하는 것이 좋다.
운영 체제 다시 설치.
운영 체제를 다시 설치하는 것 또한 바이러스 제거의 다른 방안이다. 단순히 운영 체제 파티션을 다시 포맷하고 원본 매체로부터 운영 체제를 설치하거나, 깨끗한 백업 이미지의 파티션의 이미지 복제 과정을 동반한다. 이 방식은 단순하면서도 별도로 바이러스 검사를 하는 것보다 시간을 벌 수 있다는 장점이 있고 악성 코드를 모두 제거한다는 확신을 얻을 수 있다.
개인용 컴퓨터 바이러스.
스스로 복제를 하지 못하는 경우에는 트로이 목마로 불리며, 프로그램 복제가 아니라 네트워크를 통해 감염되는 경우는 컴퓨터 웜으로 불린다. 좀 더 정확히 이야기하면, 숙주인 컴퓨터 내부에서만 증식을 하는 악성코드를 바이러스라고 하며, 숙주 컴퓨터가 필요 없이 네트워크상에서 계속 증식이 가능한 악성 코드를 웜이라고 한다. 요즈음은 웜과 바이러스의 특징을 결합하여 프로그램에 기생하며 네트워크로도 감염시키는 웜 바이러스들도 많이 생겼다.
시동 바이러스.
시동 바이러스(boot virus)는 컴퓨터를 처음 시동할 때 실행되는 시동 프로그램에 기생하는 컴퓨터 바이러스이다. 시동 바이러스는 일단 감염이 되면 시동 프로그램에 자리잡게 된다. 그렇게 되면 컴퓨터를 처음 시동하고 그 뒤에 디스크 시동을 시작하는 순간 해당 바이러스도 메모리 상주 형식으로 같이 활동을 하면서 시동을 방해하는 등의 작용을 한다. 대표적인 시동 바이러스는 미켈란젤로 바이러스, 브레인 바이러스, LBC 돌 바이러스 등이 있다.
만일 시동 바이러스에 감염이 되었다면 아래와 같은 조치를 취하면 된다.
예루살렘 바이러스.
컴퓨터에 잠복해 있다가 13일의 금요일에 집중적으로 나타나는 바이러스다.
EXE, COM 등의 확장자가 있는 실행프로그램을 파괴하는 것이 특징이다.