컴퓨터 바이러스
컴퓨터 바이러스(영어: computer virus, 문화어: 콤퓨터 비루스)[1]는 실행될 때 다른 컴퓨터 프로그램을 수정하고 자체 코드를 해당 프로그램에 삽입하여 스스로를 복제하는 악성 소프트웨어의 일종이다.[2][3] 복제에 성공하면 해당 영역은 컴퓨터 바이러스에 "감염"되었다고 하는데, 이는 생물학적 바이러스에서 유래한 은유이다.[4] 컴퓨터 바이러스는 일반적으로 호스트 프로그램이 필요하다.[5] 바이러스는 자체 코드를 호스트 프로그램에 기록한다. 프로그램이 실행되면 기록된 바이러스 프로그램이 먼저 실행되어 감염 및 손상을 유발한다. 이와 대조적으로 웜은 독립적인 프로그램 또는 코드 덩어리이므로 호스트 프로그램이 필요하지 않다. 따라서 호스트 프로그램에 구애받지 않고 독립적으로 실행되어 공격을 적극적으로 수행할 수 있다.[6][7] 바이러스 제작자는 사회공학 기만을 사용하고 보안 취약점에 대한 상세한 지식을 활용하여 시스템을 초기 감염시키고 바이러스를 확산시킨다. 바이러스는 복잡한 안티-탐지/스텔스 전략을 사용하여 바이러스 검사 소프트웨어를 회피한다.[8] 바이러스 생성 동기는 이익 추구(랜섬웨어 등), 정치적 메시지 전달 욕구, 개인적인 유희, 소프트웨어에 취약점이 존재함을 입증하기 위함, 사보타주 및 서비스 거부 공격 목적, 또는 단순히 사이버보안 문제, 인공생명, 진화 알고리즘을 탐구하고 싶어서일 수 있다.[9] 2013년 현재 컴퓨터 바이러스는 매년 수십억 달러에 달하는 경제적 피해를 입히고 있다.[10] 이에 대응하여 다양한 운영체제 사용자에게 바이러스 보호 기능을 판매하거나 무료로 배포하는 바이러스 검사 소프트웨어 산업이 성장했다.[11] 역사자기 복제 컴퓨터 프로그램 이론에 대한 첫 학술 연구는 1949년 존 폰 노이만이 일리노이 대학교 어배너-섐페인에서 "복잡한 오토마타의 이론과 조직"에 대한 강의를 하면서 수행되었다. 폰 노이만의 연구는 나중에 "자기 재생 오토마타 이론"으로 출판되었다. 그의 에세이에서 폰 노이만은 컴퓨터 프로그램을 어떻게 스스로 번식하도록 설계할 수 있는지 설명했다.[12] 폰 노이만의 자기 복제 컴퓨터 프로그램 설계는 세계 최초의 컴퓨터 바이러스로 간주되며, 그는 컴퓨터 바이러스학의 이론적 "아버지"로 여겨진다.[13] 1972년, 바이트 리삭은 폰 노이만의 자기 복제에 대한 연구를 직접적으로 기반으로 하여 "Selbstreproduzierende Automaten mit minimaler Informationsübertragung" (최소 정보 교환을 통한 자기 복제 오토마타)이라는 기사를 발표했다.[14] 이 기사는 SIEMENS 4004/35 컴퓨터 시스템용 어셈블러 프로그래밍 언어로 작성된 완벽하게 작동하는 바이러스를 설명한다. 1980년, 위르겐 크라우스는 도르트문트 대학교에서 "Selbstreproduktion bei Programmen" (프로그램의 자기 복제)이라는 제목의 디플롬 논문을 썼다.[15] 그의 연구에서 크라우스는 컴퓨터 프로그램이 생물학적 바이러스와 유사하게 행동할 수 있다고 가정했다. ![]() 크리퍼 바이러스는 1970년대 초 인터넷의 전신인 아파넷에서 처음 감지되었다.[16] 크리퍼는 1971년 BBN 테크놀로지스의 밥 토머스가 작성한 실험적인 자기 복제 프로그램이었다.[17] 크리퍼는 아파넷을 사용하여 DEC의 PDP-10 컴퓨터(TENEX 운영체제 실행)를 감염시켰다.[18] 크리퍼는 아파넷을 통해 접근하여 원격 시스템에 자신을 복사한 다음, "I'M THE CREEPER. CATCH ME IF YOU CAN!"이라는 메시지를 표시했다.[19] 리퍼(Reaper) 프로그램은 크리퍼를 삭제하기 위해 만들어졌다.[20] 1982년, "엘크 클로너"라는 프로그램은 "야생"에서 처음으로 나타난 개인용 컴퓨터 바이러스였다. 즉, 프로그램이 만들어진 단일 컴퓨터나 컴퓨터 연구소 외부에서 발견되었다는 의미이다.[21] 1981년 피츠버그 근처 마운트 레바논 고등학교의 9학년 학생인 리처드 스크렌타가 작성한 이 바이러스는 애플 도스 3.3 운영체제에 부착되어 플로피 디스크를 통해 확산되었다.[21] 50번째 사용 시 엘크 클로너 바이러스가 활성화되어 개인용 컴퓨터를 감염시키고 "엘크 클로너: 개성을 가진 프로그램"으로 시작하는 짧은 시를 표시했다. 1984년, 서던캘리포니아 대학교의 프레드 코헨은 "컴퓨터 바이러스 – 이론 및 실험"이라는 논문을 작성했다.[22] 이 논문은 자기 복제 프로그램을 "바이러스"라고 명시적으로 부른 첫 번째 논문으로, 코헨의 멘토인 레너드 애들먼이 도입한 용어이다.[23] 1987년, 코헨은 모든 가능한 바이러스를 완벽하게 탐지할 수 있는 알고리즘은 없다는 것을 증명하는 논문을 발표했다.[24] 코헨의 이론적인 압축 바이러스[25]는 악성 소프트웨어(악성 소프트웨어)가 아니라 선의의(선의의 의도를 가진) 바이러스의 예시였다. 그러나 안티바이러스 전문가들은 "선의의 바이러스" 개념을 받아들이지 않는다. 왜냐하면 어떤 원하는 기능도 바이러스 없이 구현될 수 있기 때문이다(예를 들어, 자동 압축은 윈도우에서 사용자 선택에 따라 사용할 수 있다). 어떤 바이러스든 정의상 컴퓨터에 무단 변경을 가하며, 이는 손상이 없거나 의도되지 않았더라도 바람직하지 않다. 닥터 솔로몬의 바이러스 백과사전 첫 페이지는 단순히 복제만 하는 바이러스조차도 바람직하지 않다는 것을 설명한다.[26][27] "유용한 바이러스 기능"을 설명하는 기사는 1984년 J. B. 건에 의해 "Use of virus functions to provide a virtual APL interpreter under user control"이라는 제목으로 출판되었다.[28] "야생"에서 발견된 첫 번째 IBM PC 호환기종 바이러스는 1986년에 만들어지고 1987년 파키스탄 라호르의 암자드 파루크 알비(Amjad Farooq Alvi)와 바싯 파루크 알비(Basit Farooq Alvi)가 자신들이 작성한 소프트웨어의 무단 복제를 막기 위해 출시했다고 알려진 (c)Brain이라는 부트 섹터 바이러스였다.[29][30] 마이크로소프트 윈도우를 특수하게 노린 첫 번째 바이러스인 WinVir는 윈도우 3.0 출시 2년 후인 1992년 4월에 발견되었다.[31] 이 바이러스는 윈도우 API 호출을 포함하지 않고, 대신 DOS 인터럽트에 의존했다. 몇 년 후인 1996년 2월, VLAD라는 바이러스 제작 그룹의 호주 해커들이 윈도우 95를 특수하게 노린 최초의 바이러스인 Bizatch 바이러스(일명 "Boza" 바이러스)를 만들었다.[32] 이 바이러스는 윈도우 95에 도입된 새로운 PE 포맷 파일을 공격했다.[33] 1997년 말에는 암호화되고 메모리 상주형 스텔스 바이러스인 Win32.Cabanas가 출시되었다. 이는 윈도우 NT를 대상으로 한 최초의 알려진 바이러스였다(윈도우 3.0 및 윈도우 9x 호스트도 감염시킬 수 있었다).[34] 가정용 컴퓨터 또한 바이러스의 영향을 받았다. 아미가에 처음 나타난 바이러스는 1987년 11월에 탐지된 SCA 바이러스라는 부트 섹터 바이러스였다.[35] 1988년까지 한 시삽은 자신의 BBS에서 다운로드 가능한 소프트웨어의 15%가 바이러스에 감염되었다는 사실을 발견했다고 보고했다.[36] 설계구성 요소컴퓨터 바이러스는 일반적으로 세 부분으로 구성된다: 새로운 파일을 찾아 감염시키는 감염 메커니즘, 실행될 악성 코드인 페이로드, 그리고 페이로드를 활성화할 시점을 결정하는 트리거이다.[37]
단계바이러스 단계는 컴퓨터 바이러스의 수명 주기를 생물학에 비유하여 설명한 것이다. 이 수명 주기는 네 가지 단계로 나눌 수 있다.
대상 및 복제컴퓨터 바이러스는 호스트 컴퓨터 및 소프트웨어의 다양한 하위 시스템을 감염시킨다.[45] 바이러스를 분류하는 한 가지 방법은 바이러스가 실행 파일 (예: .EXE 또는 .COM 파일과 같은), 데이터 파일 (예: 마이크로소프트 워드 문서 또는 PDF 파일과 같은), 또는 호스트의 하드 디스크 드라이브의 부트 섹터 (또는 이들 모두의 조합) 중 어디에 상주하는지 분석하는 것이다.[46][47] 메모리 상주 바이러스(또는 간단히 "상주 바이러스")는 실행될 때 운영 체제의 일부로 자신을 설치하며, 그 후 컴퓨터가 부팅될 때부터 종료될 때까지 램에 남아 있다. 상주 바이러스는 인터럽트 처리 코드 또는 다른 함수를 덮어쓰고, 운영 체제가 대상 파일 또는 디스크 섹터에 접근하려고 할 때 바이러스 코드가 요청을 가로채고 제어 흐름을 복제 모듈로 리디렉션하여 대상을 감염시킨다. 대조적으로, 비메모리 상주 바이러스(또는 "비상주 바이러스")는 실행될 때 디스크에서 대상을 검색하고 감염시킨 다음 종료된다(즉, 실행이 완료된 후 메모리에 남아 있지 않는다).[48] 마이크로소프트 아웃룩과 마이크로소프트 워드와 같은 많은 일반 응용 프로그램은 문서나 이메일에 매크로 프로그램을 포함할 수 있도록 하여 문서가 열릴 때 자동으로 실행되도록 한다. 매크로 바이러스(또는 "문서 바이러스")는 매크로 언어로 작성되어 이러한 문서에 포함되는 바이러스로, 사용자가 파일을 열면 바이러스 코드가 실행되어 사용자의 컴퓨터를 감염시킬 수 있다. 이것이 예상치 못하거나 의심스러운 이메일 첨부 파일을 여는 것이 위험한 이유 중 하나이다.[49][50] 알 수 없는 사람이나 조직의 이메일 첨부 파일을 열지 않는 것이 바이러스 감염 가능성을 줄이는 데 도움이 되지만, 일부 경우에는 이메일이 신뢰할 수 있는 조직(예: 주요 은행 또는 신용 카드 회사)에서 온 것처럼 보이도록 바이러스가 설계된다. 부트 섹터 바이러스는 호스트의 하드 디스크 드라이브, 솔리드 스테이트 드라이브 또는 이동식 저장 매체(플래시 드라이브, 플로피 디스크 등)의 부트 섹터 및 마스터 부트 레코드[51](MBR)을 특별히 노린다.[52] 부트 섹터에서 컴퓨터 바이러스가 전송되는 가장 일반적인 방법은 물리적 미디어이다. 드라이브의 VBR을 읽을 때, 컴퓨터에 연결된 감염된 플로피 디스크 또는 USB 플래시 드라이브가 데이터를 전송한 다음 기존 부트 코드를 수정하거나 교체한다. 다음에 사용자가 데스크톱을 시작하려고 하면 바이러스가 즉시 로드되어 마스터 부트 레코드의 일부로 실행된다.[53] 이메일 바이러스는 우발적이 아니라 의도적으로 이메일 시스템을 사용하여 확산되는 바이러스이다. 바이러스에 감염된 파일이 이메일 첨부 파일로 우발적으로 전송될 수 있지만, 이메일 바이러스는 이메일 시스템 기능을 인지하고 있다. 이들은 일반적으로 특정 유형의 이메일 시스템(마이크로소프트 아웃룩이 가장 흔하게 사용됨)을 대상으로 하며, 다양한 출처에서 이메일 주소를 수집하고, 전송되는 모든 이메일에 자신의 사본을 첨부하거나, 자신을 첨부 파일로 포함하는 이메일 메시지를 생성할 수 있다.[54] 탐지일부 바이러스는 사용자의 탐지를 피하기 위해 다양한 종류의 기만 기술을 사용한다. 특히 도스 플랫폼의 오래된 바이러스 중 일부는 호스트 파일이 바이러스에 감염될 때 "최종 수정" 날짜가 동일하게 유지되도록 한다. 그러나 이 접근 방식은 바이러스 검사 소프트웨어를 속이지 못한다. 특히 파일 변경에 대한 순환 중복 검사를 유지하고 날짜를 기록하는 소프트웨어는 더욱 그러하다.[55] 일부 바이러스는 파일 크기를 늘리거나 파일을 손상시키지 않고 파일을 감염시킬 수 있다. 이는 실행 파일의 사용되지 않는 영역을 덮어써서 이루어진다. 이러한 바이러스를 공동 바이러스(cavity virus)라고 한다. 예를 들어, CIH 바이러스 또는 체르노빌 바이러스는 PE 포맷 파일을 감염시킨다. 이 파일에는 많은 빈 공간이 있으므로 1KB 크기의 바이러스는 파일 크기를 늘리지 않았다.[56] 일부 바이러스는 안티바이러스 소프트웨어가 자신을 탐지하기 전에 관련 작업을 종료하여 탐지를 피하려고 시도한다(예: 콘피커). 바이러스는 또한 루트킷을 사용하여 시스템 프로세스 목록에 자신을 표시하지 않거나 신뢰할 수 있는 프로세스 내에 자신을 위장하여 존재를 숨길 수 있다.[57] 2010년대에 컴퓨터와 운영 체제가 점점 더 커지고 복잡해짐에 따라 오래된 은닉 기술은 업데이트되거나 대체되어야 한다. 컴퓨터를 바이러스로부터 방어하려면 파일 시스템이 모든 종류의 파일 접근에 대해 상세하고 명시적인 권한을 부여하도록 전환해야 할 수 있다. 또한, 알려진 바이러스 중 실제로 심각한 사건을 일으키는 것은 극히 일부에 불과한데, 이는 주로 많은 바이러스가 이론적인 전염병 역치 아래에 머물기 때문이다.[58] 읽기 요청 가로채기일부 안티바이러스 소프트웨어는 은닉 메커니즘에 대응하기 위해 다양한 기술을 사용하지만, 일단 감염이 발생하면 시스템을 "치료"하는 모든 수단은 신뢰할 수 없다. 마이크로소프트 윈도우 운영 체제에서 NTFS 파일 시스템은 독점적이다. 이로 인해 안티바이러스 소프트웨어는 이러한 요청을 처리하는 윈도우 파일에 "읽기" 요청을 보내는 것 외에 다른 대안이 거의 없다. 일부 바이러스는 운영 체제에 대한 안티바이러스 소프트웨어의 요청을 가로채어 안티바이러스 소프트웨어를 속인다. 바이러스는 감염된 파일을 읽는 요청을 가로채어 스스로 요청을 처리하고 감염되지 않은 파일 버전을 안티바이러스 소프트웨어에 반환하여 숨을 수 있다. 가로채기는 읽기 요청을 처리할 실제 운영 체제 파일의 코드 인젝션에 의해 발생할 수 있다. 따라서 바이러스를 탐지하려는 안티바이러스 소프트웨어는 감염된 파일을 읽을 수 없거나, "읽기" 요청이 동일한 파일의 감염되지 않은 버전으로 처리된다.[59] "스텔스" 바이러스를 피하는 유일하고 신뢰할 수 있는 방법은 "깨끗한" 것으로 알려진 미디어에서 부팅하는 것이다. 그런 다음 보안 소프트웨어를 사용하여 휴면 운영 체제 파일을 확인할 수 있다. 대부분의 보안 소프트웨어는 바이러스 시그니처에 의존하거나 휴리스틱을 사용한다.[60][61] 보안 소프트웨어는 윈도우 OS 파일의 파일 "해시" 데이터베이스를 사용하여 변경된 파일을 식별하고, 윈도우 설치 미디어를 요청하여 정품 버전으로 교체할 수도 있다. 이전 버전의 윈도우에서는 윈도우 OS 파일의 파일 암호화 해시 함수가 윈도우에 저장되어 파일 무결성/진위성을 확인할 수 있었지만, 이는 덮어쓰여질 수 있어 시스템 파일 검사기가 변경된 시스템 파일이 정품이라고 보고할 수 있었다. 따라서 파일 해시를 사용하여 변경된 파일을 스캔하는 것이 항상 감염을 찾는 것을 보장하지는 않았다.[62] 자기 수정대부분의 현대 바이러스 검사 프로그램은 소위 바이러스 시그니처를 스캔하여 일반 프로그램 내에서 바이러스 패턴을 찾으려 한다.[63] 다른 바이러스 검사 프로그램은 바이러스를 식별할 때 다른 검색 방법을 사용한다. 바이러스 스캐너가 파일에서 그러한 패턴을 발견하면, 파일이 감염되었다고 사용자에게 알리기 전에, 바이러스를 발견한 것이 맞는지, 그리고 단순히 무해한 파일에서 우연히 일치하는 시퀀스가 아닌지 확인하기 위해 다른 검사를 수행한다. 그러면 사용자는 감염된 파일을 삭제하거나 (경우에 따라) "정리" 또는 "치유"할 수 있다. 일부 바이러스는 시그니처를 통한 탐지를 어렵게 만들지만 불가능하지는 않은 기술을 사용한다. 이러한 바이러스는 감염될 때마다 코드를 수정한다. 즉, 각 감염된 파일에는 바이러스의 다른 변형이 포함된다. 시그니처 탐지를 회피하는 한 가지 방법은 단순 암호화를 사용하여 바이러스 본체를 암호화하고, 암호화 모듈과 감염마다 변하지 않는 정적 암호화 키만 평문으로 남겨두는 것이다.[64] 이 경우 바이러스는 작은 해독 모듈과 바이러스 코드의 암호화된 복사본으로 구성된다. 바이러스가 각 감염된 파일에 대해 다른 키로 암호화된다면, 바이러스에서 일정한 부분은 해독 모듈뿐이며, 이 모듈은 (예를 들어) 끝에 추가될 것이다. 이 경우 바이러스 스캐너는 시그니처를 사용하여 바이러스를 직접 탐지할 수 없지만, 여전히 해독 모듈을 탐지할 수 있어 바이러스의 간접적인 탐지가 가능하다. 이러한 키는 감염된 호스트에 저장된 대칭 키이므로 최종 바이러스를 해독하는 것은 전적으로 가능하지만, 자체 수정 코드는 매우 드물기 때문에 발견하는 것만으로도 바이러스 스캐너가 파일을 의심스럽다고 "표시"할 충분한 이유가 될 수 있으므로 아마 필요하지 않을 것이다. 오래되었지만 압축적인 방법은 덧셈이나 뺄셈과 같은 산술 연산과 XOR과 같은 논리적 조건을 사용하는 것이다.[65] 여기서 바이러스의 각 바이트는 상수로 XOR되어 해독을 위해 XOR 연산만 반복하면 되었다. 코드가 자체적으로 수정되는 것은 의심스럽기 때문에 암호화/복호화를 수행하는 코드가 많은 바이러스 정의에서 시그니처의 일부일 수 있다. 더 간단한 이전 접근 방식은 키를 사용하지 않았고, 암호화는 증가 및 감소, 비트 회전, 산술 부정 및 논리 NOT과 같이 매개변수가 없는 연산만으로 구성되었다.[65] 다형성 바이러스라고 불리는 일부 바이러스는 실행 파일 내에서 바이러스 스캐너가 업데이트를 위해 비활성화되거나 컴퓨터가 재부팅되는 등 특정 이벤트 발생 시 바이러스가 암호화되도록 하는 암호화 수단을 사용한다.[66] 이를 암호바이러스학이라고 한다. 다형성 코드는 바이러스 스캐너에 심각한 위협을 제기한 첫 번째 기술이었다. 일반적인 암호화 바이러스와 마찬가지로 다형성 바이러스는 자신을 암호화한 복사본으로 파일을 감염시키며, 이는 해독 모듈에 의해 해독된다. 그러나 다형성 바이러스의 경우, 이 해독 모듈 또한 감염될 때마다 수정된다. 따라서 잘 작성된 다형성 바이러스는 감염 간에 동일하게 유지되는 부분이 없어 "시그니처"를 사용하여 직접 탐지하기가 매우 어렵다.[67][68] 바이러스 검사 소프트웨어는 에뮬레이터를 사용하여 바이러스를 해독하거나 암호화된 바이러스 본체의 통계적 패턴 분석을 통해 이를 탐지할 수 있다. 다형성 코드를 사용하려면 바이러스가 암호화된 본체 어딘가에 다형성 엔진("변형 엔진" 또는 "돌연변이 엔진"이라고도 함)을 가지고 있어야 한다. 이러한 엔진이 어떻게 작동하는지에 대한 기술적인 세부 사항은 다형성 코드를 참조하라.[69] 일부 바이러스는 바이러스의 돌연변이 속도를 크게 제한하는 방식으로 다형성 코드를 사용한다. 예를 들어, 바이러스는 시간이 지남에 따라 약간만 변형되도록 프로그래밍될 수 있거나, 이미 바이러스 복사본이 포함된 컴퓨터의 파일을 감염시킬 때는 변형을 자제하도록 프로그래밍될 수 있다. 이러한 느린 다형성 코드를 사용하는 장점은 바이러스 백신 전문가와 연구자들이 바이러스의 대표 샘플을 얻기 더 어렵게 만든다는 것이다. 왜냐하면 한 번 실행에서 감염된 "미끼" 파일에는 일반적으로 동일하거나 유사한 바이러스 샘플이 포함될 것이기 때문이다. 이는 바이러스 스캐너에 의한 탐지가 신뢰할 수 없을 가능성을 높이고, 일부 바이러스 인스턴스는 탐지를 회피할 수 있게 만들 수 있다. 에뮬레이션에 의한 탐지를 피하기 위해 일부 바이러스는 새로운 실행 파일을 감염시킬 때마다 완전히 자체적으로 코드를 다시 작성한다. 이러한 기술을 사용하는 바이러스를 메타모픽 코드라고 한다. 메타모픽을 가능하게 하려면 "메타모픽 엔진"이 필요하다. 메타모픽 바이러스는 일반적으로 매우 크고 복잡하다. 예를 들어, W32/Simile은 14,000줄이 넘는 어셈블리어 코드로 구성되었으며, 그 중 90%는 메타모픽 엔진의 일부이다.[70][71] 영향피해는 시스템 장애 유발, 데이터 손상, 컴퓨터 자원 낭비, 유지보수 비용 증가 또는 개인 정보 도용으로 인해 발생한다.[10] 어떤 바이러스 검사 소프트웨어로도 모든 컴퓨터 바이러스를(특히 새로운 바이러스를) 발견할 수는 없지만, 컴퓨터 보안 연구자들은 바이러스 검사 솔루션이 널리 배포되기 전에 새로운 바이러스를 더욱 효과적으로 탐지할 수 있는 새로운 방법을 적극적으로 찾고 있다.[72] 전력 바이러스는 특정 기계어 코드를 실행하여 최대 CPU 전력 소비량 (중앙 처리 장치의 열에너지 출력)에 도달하는 컴퓨터 프로그램이다.[73] 컴퓨터 냉각 장치는 최대 전력이 아닌 열 설계 전력까지 전력을 소산하도록 설계되었으며, 전력 바이러스는 프로세서를 멈추는 논리가 없으면 시스템을 과열시킬 수 있다. 이는 영구적인 물리적 손상을 유발할 수 있다. 전력 바이러스는 악의적일 수 있지만, 종종 제품 설계 단계 또는 제품 벤치마킹을 위한 컴퓨터 구성 요소의 통합 시험 및 열 테스트에 사용되는 테스트 소프트웨어 제품군이다.[74] 안정성 테스트 애플리케이션은 전력 바이러스와 동일한 효과(높은 CPU 사용량)를 가지지만 사용자의 제어 하에 있는 유사한 프로그램이다. 이들은 예를 들어 오버클럭할 때 CPU를 테스트하는 데 사용된다. 잘못 작성된 프로그램의 스핀락은 충분히 오래 지속되면 유사한 증상을 유발할 수 있다. 다른 마이크로 아키텍처는 일반적으로 최대 전력에 도달하기 위해 다른 기계어 코드를 필요로 한다. 이러한 기계어 코드의 예시는 CPU 참조 자료에 배포되지 않는 것으로 보인다.[75] 감염 벡터소프트웨어는 종종 시스템 리소스의 무단 사용을 방지하기 위한 보안 기능과 함께 설계되므로, 많은 바이러스는 보안 버그를 악용하고 조작하여 스스로 확산하고 다른 컴퓨터를 감염시켜야 한다. 보안 버그는 시스템 또는 응용 프로그램 소프트웨어의 보안 결함이다. 수많은 "버그"를 생성하는 소프트웨어 개발 전략은 일반적으로 바이러스의 잠재적인 악용 가능한 "구멍" 또는 "입구"도 생성한다. 자기 복제를 위해 바이러스는 코드를 실행하고 메모리에 쓸 수 있어야 한다. 이러한 이유로 많은 바이러스는 합법적인 프로그램의 일부일 수 있는 실행 파일에 자신을 첨부한다(코드 인젝션 참조). 사용자가 감염된 프로그램을 시작하려고 하면 바이러스의 코드가 동시에 실행될 수 있다.[76] 프로그램 연결을 결정하기 위해 파일 확장자를 사용하는 운영 체제(예: 마이크로소프트 윈도우)에서는 확장자가 기본적으로 사용자에게 숨겨질 수 있다. 이를 통해 사용자에게 보이는 것과 다른 유형의 파일을 만들 수 있다. 예를 들어, 실행 파일을 만들고 "picture.png.exe"라고 이름을 지정하면 사용자는 "picture.png"만 보고 이 파일이 디지털 이미지이며 대부분 안전하다고 가정하지만, 열면 클라이언트 머신에서 실행 파일이 실행된다.[77] 바이러스는 플래시 드라이브와 같은 이동식 미디어에 설치될 수 있다. 드라이브는 정부 건물이나 다른 대상의 주차장에 놓여질 수 있으며, 호기심 많은 사용자가 드라이브를 컴퓨터에 삽입하기를 바라는 것이다. 2015년 실험에서 미시간 대학교 연구원들은 사용자의 45-98%가 알 수 없는 출처의 플래시 드라이브를 연결할 것이라는 것을 발견했다.[78] 대부분의 바이러스는 마이크로소프트 윈도우를 실행하는 시스템을 대상으로 한다. 이는 마이크로소프트가 데스크톱 컴퓨터 사용자 시장에서 큰 점유율을 차지하기 때문이다.[79] 네트워크상의 소프트웨어 시스템 다양성은 바이러스와 악성 소프트웨어의 파괴적인 잠재력을 제한한다.[a] 오픈 소스 운영 체제인 리눅스는 사용자가 다양한 데스크톱 환경, 패키징 도구 등을 선택할 수 있도록 하므로, 이러한 시스템 중 하나를 대상으로 하는 악성 코드는 전체 사용자 중 일부에게만 영향을 미친다. 많은 윈도우 사용자는 동일한 응용 프로그램 세트를 실행하고 있어, 바이러스가 대규모 호스트에서 동일한 취약점 공격을 대상으로 함으로써 마이크로소프트 윈도우 시스템 간에 빠르게 확산될 수 있다.[80][81][82][83] 일반적으로 리눅스와 유닉스는 권한 없이 일반 사용자가 운영체제 환경을 변경하는 것을 본래적으로 막아왔지만, 윈도우 사용자는 일반적으로 이러한 변경을 막지 않아 바이러스가 윈도우 호스트에서 전체 시스템을 쉽게 제어할 수 있다. 이러한 차이는 윈도우 XP와 같은 현대 버전에서 시스템 관리자 계정이 널리 사용되기 때문에 부분적으로 지속되었다. 1997년에 연구원들은 리눅스용 바이러스인 "블리스"를 만들고 배포했다.[84] 그러나 블리스는 사용자가 명시적으로 실행해야 하며, 사용자가 수정할 수 있는 프로그램만 감염시킬 수 있다. 윈도우 사용자와 달리 대부분의 유닉스 사용자는 소프트웨어 설치 또는 구성 시를 제외하고는 관리자 또는 슈퍼유저("root 사용자")로 로그인하지 않는다. 결과적으로 사용자가 바이러스를 실행하더라도 운영체제에 해를 끼칠 수 없었다. 블리스 바이러스는 결코 널리 퍼지지 않았고, 주로 연구용으로 남아 있다. 개발자는 나중에 유즈넷에 소스 코드를 게시하여 연구자들이 작동 방식을 볼 수 있도록 했다.[85] 컴퓨터 네트워크가 널리 퍼지기 전에는 대부분의 바이러스가 이동식 매체, 특히 플로피 디스크를 통해 확산되었다. 개인용 컴퓨터 초기에는 많은 사용자들이 플로피를 통해 정보와 프로그램을 정기적으로 교환했다. 일부 바이러스는 이러한 디스크에 저장된 프로그램을 감염시켜 확산되었고, 다른 바이러스는 디스크의 부트 섹터에 자신을 설치하여 사용자가 의도치 않게 디스크로 컴퓨터를 부팅할 때 실행되도록 했다. 당시 개인용 컴퓨터는 드라이브에 플로피가 남아 있으면 먼저 플로피로 부팅하려고 시도했다. 플로피 디스크가 사용되지 않게 될 때까지 이것이 가장 성공적인 감염 전략이었고 부트 섹터 바이러스는 수년 동안 "야생"에서 가장 흔한 바이러스였다. 전통적인 컴퓨터 바이러스는 1980년대에 개인용 컴퓨터의 확산과 그에 따른 게시판 시스템(BBS), 모뎀 사용 및 소프트웨어 공유의 증가로 인해 출현했다. 게시판 기반 소프트웨어 공유는 트로이 목마 프로그램의 확산에 직접적으로 기여했으며, 바이러스는 인기리에 거래되는 소프트웨어를 감염시키기 위해 작성되었다. 셰어웨어와 불법 복제 소프트웨어는 BBS에서 바이러스의 흔한 벡터였다.[86][87] 바이러스는 네트워크 파일 시스템이나 다른 컴퓨터에서 접근하는 파일 시스템의 파일을 감염시켜 다른 컴퓨터로 확산될 가능성을 높일 수 있다.[88] 매크로 바이러스는 1990년대 중반 이후 흔해졌다. 이 바이러스들 대부분은 마이크로소프트 워드와 마이크로소프트 엑셀과 같은 마이크로소프트 프로그램용 스크립팅 언어로 작성되었고, 문서와 스프레드시트를 감염시켜 마이크로소프트 오피스 전반에 걸쳐 퍼졌다. 워드와 엑셀은 맥 OS에서도 사용할 수 있었기 때문에, 대부분은 매킨토시 컴퓨터에도 퍼질 수 있었다. 이 바이러스들 대부분은 감염된 이메일 메시지를 보낼 수 있는 기능은 없었지만, 일부 바이러스는 마이크로소프트 아웃룩 컴포넌트 오브젝트 모델 (COM) 인터페이스를 이용했다.[89][90] 마이크로소프트 워드의 일부 이전 버전에서는 매크로가 추가 빈 줄과 함께 자신을 복제할 수 있도록 허용한다. 만약 두 개의 매크로 바이러스가 동시에 문서를 감염시킨다면, 두 바이러스의 조합은 스스로 복제되는 경우 "짝짓기"처럼 보일 수 있으며, "부모"와는 다른 고유한 바이러스로 탐지될 가능성이 높다.[91] 바이러스는 또한 감염된 기계에 저장된 모든 연락처(예: 친구 및 동료의 이메일 주소)에게 웹 주소 링크를 인스턴트 메시지로 보낼 수 있다. 수신자가 링크가 친구(신뢰할 수 있는 소스)로부터 온 것이라고 생각하고 웹사이트의 링크를 따라가면, 해당 사이트에 호스팅된 바이러스가 이 새로운 컴퓨터를 감염시키고 계속 전파될 수 있다.[92] 사이트 간 스크립팅을 사용하여 확산되는 바이러스는 2002년에 처음 보고되었고,[93] 2005년에 학술적으로 입증되었다.[94] "야생"에서 마이스페이스(새미 웜으로)와 야후!와 같은 웹사이트를 악용한 사이트 간 스크립팅 바이러스 사례가 여러 번 있었다. 대응책![]() 1989년 ADAPSO 소프트웨어 산업 부서는 "데이터 손실 위험에 더해 고객 신뢰를 잃을 위험"이 있다고 언급한 'Dealing With Electronic Vandalism'을 출판했다.[95][96][97][98] 많은 사용자는 컴퓨터가 실행 파일을 다운로드하거나 실행하려고 할 때(예를 들어, 이메일 첨부 파일이나 USB 플래시 드라이브로 배포될 수 있음) 알려진 바이러스를 탐지하고 제거할 수 있는 바이러스 검사 소프트웨어를 설치한다. 일부 안티바이러스 소프트웨어는 악성 소프트웨어를 설치하려는 알려진 악성 웹사이트를 차단한다. 안티바이러스 소프트웨어는 호스트가 바이러스를 전송하는 기본 기능을 변경하지 않는다. 사용자는 보안 취약점("구멍")을 패치하기 위해 소프트웨어를 정기적으로 업데이트해야 한다. 안티바이러스 소프트웨어 또한 최신 위협을 인식하도록 정기적으로 업데이트해야 한다. 이는 악의적인 해커 및 다른 개인들이 항상 새로운 바이러스를 만들고 있기 때문이다. 독일 AV-TEST 연구소는 윈도우[99] 및 안드로이드[100]용 안티바이러스 소프트웨어 평가를 발표한다. 마이크로소프트 윈도우용 안티바이러스 및 안티-멀웨어 소프트웨어의 예로는 실시간 보호를 위한 선택적 마이크로소프트 시큐리티 에센셜[101] (윈도우 XP, 비스타, 윈도우 7용), 윈도우 악성 소프트웨어 제거 도구[102] (이제 매월 둘째 화요일인 "패치 화요일"에 윈도우(보안) 업데이트에 포함됨), 그리고 윈도우 디펜더 (윈도우 XP의 경우 선택적 다운로드)[103] 등이 있다. 또한, 몇몇 유능한 안티바이러스 소프트웨어 프로그램은 인터넷에서 무료로 다운로드할 수 있다(일반적으로 비상업적 용도로 제한됨).[104] 이러한 무료 프로그램 중 일부는 상용 경쟁사만큼이나 좋다.[105] 일반적인 보안 취약점은 CVE ID가 할당되고 미국 국가 취약점 데이터베이스에 등재된다. Secunia PSI[106]는 개인 사용자를 위해 무료로 제공되는 소프트웨어의 한 예로, 오래되고 취약한 소프트웨어를 PC에서 확인하고 업데이트를 시도한다. 랜섬웨어 및 피싱 신용 사기 경고는 인터넷범죄신고센터 게시판에 보도 자료로 나타난다. 랜섬웨어는 화면이나 시스템이 몸값이 지불될 때까지 잠겨 있거나 사용할 수 없다고 사용자 화면에 메시지를 게시하는 바이러스이다. 피싱은 악의적인 개인이 친구, 컴퓨터 보안 전문가 또는 다른 선의의 개인인 척하여 대상 개인이 비밀번호 또는 기타 개인 정보를 공개하도록 설득하는 기만 행위이다. 널리 사용되는 다른 예방 조치로는 적시의 운영 체제 업데이트, 소프트웨어 업데이트, 신중한 인터넷 브라우징(음지 웹사이트 피하기), 신뢰할 수 있는 소프트웨어만 설치하는 것이 있다.[107] 특정 브라우저는 구글에 보고되고 구글에 의해 악성 소프트웨어 호스팅이 확인된 사이트에 플래그를 표시한다.[108][109] 바이러스 검사 소프트웨어 문서에 설명된 것처럼 바이러스를 탐지하는 데 사용되는 두 가지 일반적인 방법이 있다. 첫 번째이자 가장 흔한 바이러스 탐지 방법은 바이러스 시그니처 정의 목록을 사용하는 것이다. 이 방법은 컴퓨터 메모리(램과 부트 섹터)와 고정 또는 이동식 드라이브(하드 드라이브, 플로피 드라이브 또는 USB 플래시 드라이브)에 저장된 파일의 내용을 검사하고, 이러한 파일을 알려진 바이러스 "시그니처" 데이터베이스와 비교하여 작동한다. 바이러스 시그니처는 개별 바이러스를 식별하는 데 사용되는 코드 문자열일 뿐이다. 각 바이러스에 대해 안티바이러스 설계자는 합법적인 프로그램에서는 발견되지 않을 고유한 시그니처 문자열을 선택하려고 노력한다. 다른 안티바이러스 프로그램은 바이러스를 식별하기 위해 다른 "시그니처"를 사용한다. 이 탐지 방법의 단점은 사용자가 최신 바이러스 정의 업데이트의 시그니처로 탐지되는 바이러스로부터만 보호되며, 새로운 바이러스로부터는 보호되지 않는다는 것이다(제로데이 공격 참조).[110] 바이러스를 찾는 두 번째 방법은 일반적인 바이러스 행동을 기반으로 한 휴리스틱 알고리즘을 사용하는 것이다. 이 방법은 안티바이러스 보안 회사들이 아직 "시그니처"를 정의하지 않은 새로운 바이러스를 탐지할 수 있지만, 시그니처를 사용하는 것보다 더 많은 오탐을 발생시킨다. 오탐은 특히 상업 환경에서 혼란을 야기할 수 있는데, 이는 회사가 IT 서비스가 시스템에서 바이러스를 확인하기 전까지 직원들에게 회사 컴퓨터 시스템을 사용하지 말라고 지시할 수 있기 때문이다. 이는 일반 직원의 생산성을 저하시킬 수 있다. 복구 전략 및 방법바이러스로 인한 피해를 줄이려면 데이터(운영체제 포함)를 다른 매체에 정기적으로 백업해야 한다. 이러한 매체는 시스템에 연결되지 않거나(대부분 하드 드라이브처럼), 읽기 전용이거나, 다른 파일 시스템을 사용하는 등 다른 이유로 접근할 수 없도록 보관해야 한다. 이렇게 하면 바이러스로 인해 데이터가 손실되더라도 백업(최근 백업이길 바란다)을 사용하여 다시 시작할 수 있다.[111] 광학 미디어(CD 및 DVD)에 대한 백업 세션이 닫히면 읽기 전용이 되므로 바이러스의 영향을 더 이상 받지 않는다(CD/DVD에 바이러스나 감염된 파일이 복사되지 않는 한). 마찬가지로, 설치된 운영 체제를 사용할 수 없게 되면 부팅 가능한 CD의 운영 체제를 사용하여 컴퓨터를 시작할 수 있다. 이동식 미디어의 백업은 복원하기 전에 신중하게 검사해야 한다. 예를 들어, 감미마 바이러스는 이동식 플래시 드라이브를 통해 전파된다.[112][113] 바이러스 검사 소프트웨어 회사에서 운영하는 많은 웹사이트는 제한된 "치료" 기능을 가진 무료 온라인 바이러스 검사 서비스를 제공한다(결국 웹사이트의 목적은 바이러스 검사 제품 및 서비스를 판매하는 것이다). 구글의 자회사인 VirusTotal.com과 같은 일부 웹사이트는 사용자가 하나 이상의 의심스러운 파일을 업로드하여 하나 이상의 바이러스 검사 프로그램으로 한 번에 스캔하고 확인할 수 있도록 한다.[114][115] 또한, 여러 유능한 바이러스 검사 소프트웨어 프로그램은 인터넷에서 무료로 다운로드할 수 있다(일반적으로 비상업적 용도로 제한됨).[116] 마이크로소프트는 선택적 무료 바이러스 검사 유틸리티인 마이크로소프트 시큐리티 에센셜, 정기적인 윈도우 업데이트의 일부로 업데이트되는 윈도우 악성 소프트웨어 제거 도구, 그리고 윈도우 8에서 바이러스 검사 제품으로 업그레이드된 구형 선택적 안티-멀웨어(악성 소프트웨어 제거) 도구인 윈도우 디펜더를 제공한다. 일부 바이러스는 시스템 복원 및 작업 관리자와 CMD와 같은 다른 중요한 윈도우 도구를 비활성화한다. 이를 수행하는 바이러스의 한 예는 CiaDoor이다. 이러한 바이러스 중 다수는 컴퓨터를 재부팅하여 네트워크가 있는 윈도우 "안전 모드"로 진입한 다음 시스템 도구 또는 마이크로소프트 안전 스캐너를 사용하여 제거할 수 있다.[117] 윈도우 미, 윈도우 XP, 윈도우 비스타 및 윈도우 7의 시스템 복원은 레지스트리 및 중요 시스템 파일을 이전 체크포인트로 복원할 수 있다. 종종 바이러스는 시스템을 "정지" 또는 "멈춤" 상태로 만들고, 그 후의 강제 재부팅은 동일한 날짜의 시스템 복원 지점을 손상시킨다. 바이러스가 복원 파일을 손상시키도록 설계되지 않았고 이전 복원 지점에 존재하지 않는 한 이전 날짜의 복원 지점은 작동해야 한다.[118][119] 마이크로소프트의 시스템 파일 검사기(윈도우 7 이후 버전에서 개선됨)는 손상된 시스템 파일을 확인하고 복구하는 데 사용될 수 있다.[120] 복제된 디스크나 디스크 이미지, 또는 백업 복사본에서 파티션 전체의 이전 "깨끗한"(바이러스 없는) 사본을 복원하는 것이 한 가지 해결책이다. 이전 백업 디스크 "이미지"를 복원하는 것은 비교적 간단하며, 일반적으로 악성 소프트웨어를 제거하고, 운영 체제와 프로그램을 처음부터 다시 설치하고 재구성하는 것보다 빠를 수 있으며, 그 다음 사용자 기본 설정을 복원할 수 있다.[111] 운영 체제를 재설치하는 것도 바이러스 제거의 또 다른 접근 방식이다. 필수 사용자 데이터 사본은 라이브 CD로 부팅하거나, 하드 드라이브를 다른 컴퓨터에 연결하고 두 번째 컴퓨터의 운영 체제로 부팅하여 복구할 수 있으며, 원본 드라이브의 감염된 프로그램을 실행하여 해당 컴퓨터를 감염시키지 않도록 각별히 주의해야 한다. 그런 다음 원본 하드 드라이브를 다시 포맷하고 원본 미디어에서 OS 및 모든 프로그램을 설치할 수 있다. 시스템이 복원되면 복원된 실행 파일로부터 재감염을 피하기 위한 예방 조치를 취해야 한다.[121] 대중문화허구에서 자기 복제 프로그램에 대한 첫 번째 알려진 설명은 그레고리 벤퍼드의 1970년 단편 소설 "The Scarred Man"에 나오는데, 이 소설은 전화 모뎀 다이얼링 기능이 있는 컴퓨터에 설치될 때, 무작위로 전화 번호를 다이얼하여 다른 컴퓨터가 응답하는 모뎀을 찾은 다음, 응답한 컴퓨터에 자체 프로그램을 프로그래밍하여 두 번째 컴퓨터도 다른 컴퓨터를 찾기 위해 무작위로 번호를 다이얼하기 시작하도록 시도하는 VIRUS라는 컴퓨터 프로그램에 대해 설명한다. 이 프로그램은 취약한 컴퓨터를 통해 기하급수적으로 빠르게 확산되며, VACCINE이라는 두 번째 프로그램으로만 대응할 수 있다.[122] 그의 이야기는 벤퍼드가 1960년대 연구소 컴퓨터에서 개념 증명으로 만들고 실행했던 실제 포트란으로 작성된 컴퓨터 바이러스를 기반으로 했으며, 그는 1970년에 존 브루너에게 그에 대해 이야기했다.[123] 이 아이디어는 1972년 데이비드 게럴드의 소설 《When HARLIE Was One》과 마이클 크라이튼의 소설 《The Terminal Man》에서 더 탐구되었고, 1975년 존 브루너의 소설 《The Shockwave Rider》의 주요 주제가 되었다.[124] 1973년 마이클 크라이튼의 SF 영화 《이색지대》는 컴퓨터 바이러스 개념을 일찍이 언급했는데, 이는 안드로이드들이 폭주하는 주된 플롯 주제이다.[125][더 나은 출처 필요] 앨런 오펜하이머의 캐릭터는 문제를 요약하며 "...여기에는 감염성 질병 과정과 유사성을 시사하는 명확한 패턴이 있으며, 한 지역에서 다음 지역으로 퍼지고 있다"고 말한다. 이에 대한 답변은 "어쩌면 질병과 피상적인 유사점이 있을지도 모른다"와 "기계의 질병을 믿기 어렵다는 것을 인정한다"고 언급한다.[126] 2016년, 주시 파리카는 1980년대와 1990년대에 가정용 컴퓨터에 배포된 악성 소프트웨어, 주로 바이러스 모음집인 '악성 소프트웨어 예술 박물관'의 창설을 발표했다.[127] '악성 소프트웨어 예술 박물관'은 인터넷 아카이브에서 호스팅되며, 헬싱키, 핀란드의 미코 휘포넨이 큐레이팅한다.[128] 이 컬렉션은 컴퓨터만 있으면 누구나 수십 년 전의 바이러스 감염을 안전하게 경험할 수 있도록 해준다. 다른 악성 소프트웨어"바이러스"라는 용어는 확장되어 다른 유형의 악성 소프트웨어를 지칭하는 데에도 오용된다. "악성 소프트웨어"는 컴퓨터 바이러스뿐만 아니라 웜, 랜섬웨어, 스파이웨어, 애드웨어, 트로이 목마, 키로거, 루트킷, 부트킷, 악성 브라우저 도우미 객체(BHO) 및 기타 악성 소프트웨어와 같은 다양한 형태의 악성 소프트웨어를 포괄한다. 현재 활동 중인 대부분의 악성 소프트웨어 위협은 컴퓨터 바이러스가 아닌 트로이 목마 프로그램 또는 웜이다. 1985년 프레드 코헨이 만든 컴퓨터 바이러스라는 용어는 잘못된 명칭이다.[129] 바이러스는 종종 감염된 호스트 컴퓨터에서 하드 디스크 공간이나 중앙 처리 장치(CPU) 시간 확보, 신용카드 번호, 직불 카드 번호, 전화번호, 이름, 이메일 주소, 비밀번호, 은행 정보, 집 주소 등 개인 정보에 접근하고 훔치는 것, 데이터 손상, 사용자 화면에 정치적, 유머러스하거나 위협적인 메시지 표시, 이메일 연락처에 스팸 광고 보내기, 키스트로크 기록, 심지어 컴퓨터를 무용지물로 만드는 것과 같은 유해한 활동을 수행한다. 그러나 모든 바이러스가 파괴적인 "페이로드"를 가지고 자신을 숨기려는 것은 아니다. 바이러스의 특징은 생물학적 바이러스가 살아있는 세포 내에서 복제하는 것과 유사하게, 사용자 동의 없이 다른 소프트웨어를 자체적으로 삽입하여 수정하는 자기 복제 컴퓨터 프로그램이라는 것이다. 같이 보기각주
외부 링크 |
Portal di Ensiklopedia Dunia