Skip to content

Commit

Permalink
[update] contents
Browse files Browse the repository at this point in the history
  • Loading branch information
ensia96 committed Sep 19, 2021
1 parent c6ca9ad commit 8c2a4cb
Showing 1 changed file with 271 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,275 @@ tags:

# 0. 시작하기에 앞서,

지난 시간에는 컴퓨터 시스템을 안전하고 건강하게 유지하는 데 사용하는 보안, 원리 및 기술을 살펴봤다.

그러나 최선의 노력에도 불구하고, 뉴스는 해커에 의해 사이버 공격을 받는 정부, 개인, 회사의 가득하다.

해커들은 그들의 기술적인 지식으로, 컴퓨터 시스템에 침입한다.

모든 해커가 나쁜 것은 아니다.

버그를 찾고 시스템의 안전성과 탄력성을 높이기 위해 소프트웨어의 보안 허점을 폐쇄하려는 해커가 있다.

그들은 종종 보안 평가를 수행하기 위해 기업 및 정부 기관에 고용된다.

이 좋은 해커들은 'White Hat' 이라고 부른다.

한편으론 'Black Hat', 악의적인 해커들이 컴퓨터 취약점과 데이터를 도용하고 악용하며 판매할 의도가 있다.

해커의 동기도 매우 다르다.

오락과 호기심에 대한 일부 해킹은, 사이버 범죄자가 주로 금전적 이득을 위해 해킹하는 경우다.

그리고 사회적 또는 정치적 목표를 촉진시키는 기술을 사용하는 'Hacktivists' 가 있다.

그것은 단지 빙산의 일각에 불과하다.

기본적으로 해커에 대한 고정관념은 버려진 피자 박스로 가득 찬 어두운 방에 앉아있는 인기 없는 아이는 대학에 있는 해커 'John Green' 보다 잘 설명한 것처럼 들릴지도 모른다.

이번 시간에 여러분에게 어떻게 해커가 되는지 가르쳐주진 않는다.

대신, 해커가 컴퓨터 시스템에 침입해서 어떻게 했는지 아이디어를 제시하는 몇몇 고전적인 예를 논의할 것이다.

# 1.

해커가 컴퓨터 시스템에 침투하는 가장 일반적인 방법은 전부 뒤집어 놓는 것이 아니라, 사용자가 속아서 들어오게 하는 것이다.

이를 사회 공학(Social Engineering) 이라고 하며, 사람이 기밀 정보를 누설하거나 컴퓨터 시스템을 공격자가 진입할 수 있도록 설정하게 한다.

가장 흔한 유형의 공격은 피싱(Phishing) 이며, 웹 사이트의 계정(예: 은행) 에 로그인하라는 이메일로 가장 자주 접하게 된다.

전자 메일의 링크를 클릭하라는 메시지가 표시된다.

이 링크를 클릭하면 일반인들에게는 합법적인 것처럼 보이지만 실제로는 악의적인 복제본이다.

사용자 이름과 암호를 입력하면, 그 정보는 해커에게 곧바로 간다.

그런 다음 해커는 실제 웹 사이트에 여러분의 아이디로 로그인할 수 있다.

나쁜 소식이다!

0.001%의 성공률만으로도 백만 건의 피싱 전자 메일이 수천 개의 손상된 계정을 양도할 수 있다.

또 다른 사회 공학 공격은 프리텍스팅(Pretexting) 이다.

공격자가 회사에 전화를 걸어 자신감있게 자신이 IT 부서인 척 말하면, 종종 공격자는 첫 번째 번호로 전화를 걸고, 두 번째로 옮겨달라고 부탁한다.

이렇게 하면 전화번호가 회사 내부에 있는 것처럼 보인다.

그런 다음 공격자는 자신도 모르게 사용자가 컴퓨터를 손상시키지 않도록 환경을 설정하거나, 기밀 세부 사항을 공개하도록 지시할 수 있다.

이는 암호 또는 네트워크 구성과 유사하다.

'여보세요, IT 부서의 수잔이에요. 여기에 몇 가지 네트워크 문제를 겪고 있는데 설정 좀 확인해 주실래요?'

이런 식으로 시작된다.

공격자는 특히 핵심 직원의 이름을 찾는 것과 같은 사전조사를 통해 설득력을 갖는다.

희생자를 찾는 데 10번 전화를 걸 수 있지만 들어가기만 하면 된다.

이메일은 트로이 목마(Trojan Horses) 의 일반적인 전송 메커니즘으로, 사진이나 인보이스와 같이 무해한 첨부파일로 가장하지만, 실제로는 맬웨어라는 악의적인 소프트웨어가 포함되어 있는 프로그램이다.

맬웨어는 다양한 형태를 취할 수 있다.


일부는 여러분의 은행 신용증과 같은 데이터를 도용할 수 있다.

랜섬웨어로 알려져 있는 또 다른 것들은, 파일을 암호화하고 몸값을 요구할 수 있다.

악성 코드를 실행하지 못하거나 사용자를 들어오게 할 수 없을 때, 공격자는 다른 수단으로 강제 침입해야 한다.

하나는, 지난 시간에 간단히 말했던, 성공할 때까지 모든 조합의 무차별적인 암호 시도다.

대부분의 현대 시스템은 시도가 실패할 때마다 더 오랜 시간 동안 점차적으로 기다리게 하거나 특정 횟수의 시도 후에는 완전히 잠그기 때문에 이러한 유형의 공격을 방어한다.

이 문제를 극복하기 위한 최근의 해킹방법 중 하나는 NAND 미러링이라도 불리며, 컴퓨터에 물리적으로 접근할 수 있는 경우, 장치의 메모리 칩에 와이어를 연결하고 내용물을 완벽하게 복사할 수 있다.

이 설정을 사용하면 장치가 대기 상태가 될 때까지 일련의 암호를 사용할 수 있다.

이러한 상황이 발생하면 메모리를 원래의 복사본으로 다시 채우고 본질적으로 재설정하여 기다리지 않고 더 많은 암호를 즉시 시도할 수 있다.

이 기술은 아이폰 5C에서 성공한 것으로 나타났지만, 많은 새로운 장치에는 이러한 유형의 공격을 저지하는 메커니즘이 포함된다.

기기에 실제로 접근할 수 없는 경우 인터넷을 통해 원격으로 해킹할 수 있는 방법을 찾아야 한다.

일반적으로 공격자는 시스템의 버그를 찾아서 활용하고, 버그를 활용하여 성공적으로 기능이나 접근 권한을 얻는 것을 악용이라고 한다.

하나의 일반적인 유형의 악용은 버퍼 오버 플로우(Buffer Overflow) 다.

버퍼는 일반적으로 데이터를 저장하기 위해 예약된 메모리 블록을 뜻한다.

우리는 23강의 픽셀 데이터를 저장하는 데 사용되는 비디오 버퍼에 대해 이야기했었다.

간단한 예로 우리는 운영체제의 사용자 이름과 비밀번호 필드가 있는 로그인 프롬프트를 상상할 수 있다.

내부에서 이 운영 체제는 입력된 텍스트 값을 저장하기 위해 버퍼를 사용한다.

설명을 위해 이 버퍼들의 크기를 10으로 지정하겠다.

메모리에 이와 같은 두 개의 텍스트 버퍼가 보인다.

물론, 운영 체제는 사용자 이름과 암호 이상을 추적하므로 메모리에 이전과 이후의 데이터가 모두 저장된다.

사용자가 사용자 이름과 암호를 입력하면 값을 버퍼로 복사하여 확인할 수 있다.

버퍼 오버플로우 공격은 정확히 이름에서 알 수 있듯, 버퍼를 오버플로하는 것이다.

이 경우, 10글자보다 긴 모든 암호는 인접한 메모리 데이터를 덮어 쓴다.

때때로 이것은 단지 프로그램이나 운영 체제의 충돌을 일으키는데, 중요한 값이 외계어로 덮어쓰여지기 때문이다.

시스템을 망가뜨리는 것은 나쁜 일이며, 장난스러운 해커가 원하는 모든 것이 어쩌면 불쾌할 수 있다.

그러나 공격자는 목적을 가진 새로운 값을 메모리에 주입하여 영리하게 버그를 더 악용할 수도 있다.

예를 들어, 'is admin' 변수를 true 로 설정하는 방법이 있다.

임의로 프로그램의 메모리를 조작할 수 있는 기능으로 해커는 로그인 프롬프트와 같은 것을 우회할 수 있으며, 때로는 이 프로그램을 사용하여 전체 시스템을 도용할 수도 있다.

버퍼 오버플로 공격과 싸울 수 있는 여러 가지 방법이 있다.

가장 쉬운 방법은 항상 버퍼에 복사하기 전에 길이를 테스트하는 것이다.

이를 범위 검사(Bounds Checking) 라고 한다.

많은 현대 프로그래밍 언어는 범위 검사를 자동으로 구현한다.

프로그램은 가상의 'is admin' 플래그와 같은 변수의 메모리 위치를 무작위로 추출하여 해커가 덮어 쓸 메모리 위치를 알지 못하게 하고, 접근 권한을 얻는 것보다 프로그램을 중단시킬 가능성이 더 크다.

프로그램은 버퍼 다음에 사용되지 않은 공간을 남겨두고 값이 변경되었는지 여부를 확인한다.

그럴 경우, 공격자가 메모리를 가지고 놀고 있음을 알 수 있다.

이 부분을 카나리아(Canaries) 라고 하며, 위험한 상황을 경고하기 위해 지하로 데려가는 작은 새 광부의 이름을 딴 것이다.

또다른 고전적인 해킹은 코드 삽입(Code Injection) 이다.

거의 모든 대형 웹사이트, 데이터베이스를 사용하는 웹 사이트를 공격하는 데 가장 일반적으로 사용된다.

이 강의에선 데이터베이스는 다루지 않을 것이며, 여기에 간단한 공격 유형의 예제가 있다.

구조화된 쿼리 언어인 SQL, sequel 이라고도 불리는 인기있는 데이터베이스 API를 사용할 것이다.

로그인 프롬프트가 웹 페이지에서 실행 중인 장면을 상상해보자.

사용자가 로그인을 클릭하면 텍스트 값은 코드를 실행하는 서버로 전송된다.

그 코드는 해당 사용자 이름이 존재하는지 확인하고, 암호가 일치하는지 확인한다.

이를 위해 서버는 화면처럼 보이는, SQL 쿼리로 알려진 코드를 실행한다.

먼저, 우리가 데이터베이스에서 어떤 데이터를 검색할지 명시해야 한다.

이 경우 비밀번호를 가져온다.

서버는 또한 값을 검색할 데이터베이스의 위치를 지정해야 한다.

이 경우 모든 사용자의 데이터는 'users' 라고 표시된 테이블의 데이터 구조에 저장된다.

마지막으로, 서버는 데이터베이스의 모든 사용자를 위한 거대한 암호 목록을 되찾고 싶지 않으므로, 사용자 이름이 특정 값과 동일한 계정의 데이터만 필요로 한다고 지정한다.

이 값은 사용자가 입력한 내용을 기반으로 하여 다음과 같이 SQL 쿼리에 복사된다.

그래서 SQL 데이터베이스에 보내진 실제 명령은 다음과 같이 보일 것이다.

여기 username 은 philbin 과 같다.

또한 SQL 명령은 세미콜론(;) 으로 끝난다.

어떻게 누군가 이것을 해킹할 수 있을까?

이는 SQL 명령어에 내장된 악의적인 사용자 이름을 전송함으로써 해킹한다.

마찬가지로, 우리는 이 펑키한 사용자 이름을 서버에 보낼 수 있다.

서버가 이 텍스트를 SQL 쿼리로 복사하면, 화면과 같이 끝난다.

앞서 언급했듯이, 명령을 분리하기 위해 세미콜론이 사용된다.

따라서 첫 번째 실행되는 명령은 다음과 같다.

'whatever' 이라는 사용자가 있는 경우, 데이터베이스가 암호를 반환한다.

물론, 우리는 무엇이 whatever 의 비밀번호인지 모르므로, 잘못된 결과를 얻고 서버는 우리를 거부한다.

whatever 이라는 사용자가 없다면 데이터베이스는 암호를 반환하지 않거나 오류를 가져와 다시 서버는 우리를 거부한다.

어쨋든 우리는 상관하지 않는다.

관심을 가져야 할 것은 다음 SQL 명령이다.

'DROP TABLE users;' 사용자 이름 필드를 조작하여 주입하는 명령이다.

이 명령은 SQL 데이터베이스에 모든 사용자 데이터를 포함하는 테이블을 삭제하도록 지시한다.

은행과 같은 곳, 또는 실제 어디에서나 많은 두통을 일으킬 것이다.

우리가 시스템을 침입하지 않았다는 것을 주목하자.

사용자 이름과 비밀번호를 추측하는 것과는 다르다.

정식 접근 권한이 없어도 버그를 악용하여 아수라장을 일으킬 수 있다.

이것은 현재 거의 모든 서버에 방어 기능이 있는 매우 간단한 코드 삽입 예제다.

데이터베이스에 새로운 관리자 계정과 같은 기록을 추가하려면 보다 정교한 공격을 해야 한다.

해커가 신용 카드 번호, 사회 보장 번호 및 모든 종류의 사악한 정보를 훔칠 수 있도록 데이터를 노출하기 위해 데이터베이스를 가져올 수도 있다.

그러나 우리는 여러분에게 그렇게 하는 방법을 가르쳐주지 않을 것이다.

버퍼 오버플로와 마찬가지로, 프로그래머는 항상 외부에서 들어오는 입력을 잠재적으로 위험하다고 가정하고 신중하게 검토해야 한다.

웹상의 대부분의 사용자 이름과 비밀번호 양식은 첫 번째 방어 수준으로 사용하는 세미콜론 또는 따옴표와 같은 특수 기호를 포함시키지 않도록 한다.

좋은 서버는 데이터베이스 쿼리를 실행하기 전에 특수 문자를 제거 또는 수정하여 입력을 깔끔하게(sanitize) 만든다.

악용 익스플로잇은 종종 인터넷에서 팔리거나 공유된다.

버그가 널리 퍼지거나 손상이 심한 익스플로잇일수록 가격이나 명성이 높아진다.

정부조차도 때때로 스파이와 같은 목적으로 컴퓨터를 해킹할 수 있는 익스플로잇을 구매한다.

소프트웨어가 인식하지 못하는 새로운 악용 가능한 버그가 발견되면 그것을 제로 데이 취약점(Zero Day Vulnerability) 이라고 한다.

블랙 햇 해커들이 익스플로잇을 이익에 최대한 사용하기 위해 돌진한다.

화이트 햇 프로그래머들이 버그에 대한 패치를 내놓기 전에 말이다.

이것이 여러분의 컴퓨터 소프트웨어를 최신 상태로 유지해야 하는 중요한 이유다.

그 중 많은 다운로드가 보안 패치다.

버그가 충분한 시스템에 열려 있다면, 해커는 컴퓨터에서 컴퓨터로 자동으로 점프하는 웜이라고 불리는 프로그램을 작성할 수 있다.

해커가 많은 수의 컴퓨터를 인수할 수 있다면, 그것들을 함께 사용해 봇넷(botnet)이라 불리는 것을 형성할 수 있다.

거대한 양의 스팸 메일을 보내고, 다른 사람들의 컴퓨팅 파워와 전기를 사용하여 비트 코인을 채우고, 서버에 대한 분산 서비스 거부 또는 DDoS(Distributed Denial of Service) 공격을 착수하는 등 많은 목적을 가질 수 있다.

DDoS는 모든 컴퓨터의 봇넷이 보내는 가짜 메시지들이 있는 곳이다.

이것은 서비스를 오프라인으로 만들어, 주인이 배상금을 지불하거나 악의를 품도록 강요할 수 있다.

모든 열심히 일하는 화이트 햇과 온라인에 기록된 익스플로잇, 소프트웨어 공학의 모범 사례에도 불구하고 사이버 공격은 매일 발생한다.

여기에 세계 경제의 연간 약 5조 달러가 들며, 컴퓨팅 시스템에 대한 의존이 높아질수록 증가할 것이다.

이것은 인프라가 점점 더 컴퓨터로 구동되기 때문에 정부가 특히 우려하는 부분이다.

동력 장치, 전기 그리드, 교통 조명, 수처리 설비, 정유 공장, 항공 교통 관제, 그리고 다른 수많은 키 시스템과 같은 것들이 있다.

많은 전문가들은 다음 주요 전쟁은 사이버 공간에서 싸울 것이라고 예측한다.

국가가 물리적 공격이 아닌 경제적으로나 사회 기반 시설을 무려고하하는 사이버 전젱(Cyberwarfare) 에 무릎을 꿇을 것이다.

총알은 발사되지 않을 수도 있지만, 잃어버린 삶의 잠재력은 여전히 매우 높다.

어쩌면 핵이 없는 옛날 전쟁보다 더 높을 수도 있다.

따라서 우리 모두는 훌륭한 사이버 보안 관행을 채택히야 한다.

또한 커뮤니티가 인터넷을 통해 상호 연결되어 있기 때문에, 크나큰 잠재적 위험을 이용하고자 하는 사람들로부터 우리들의 컴퓨터 보안을 유지해야 한다.

아마 그 업데이트 알림 무시를 멈춰야 할 것이다.

0 comments on commit 8c2a4cb

Please sign in to comment.