BLOG ARTICLE Computer/속임의 정체 | 3 ARTICLE FOUND

  1. 2007.04.26 사회 공학 기법의 공격 흐름 (Social Engineering)
  2. 2007.02.15 RSA 알고리즘 - 본론
  3. 2007.01.11 RSA 알고리즘 - 서론 10

사회 공학 기법의 공격 흐름

사회 공학 기법을 사용하는 공격자는 공격 대상이 되는 특정 인물을 선정하였다면 다음과 같은 흐름으로 사회 공학 기법의 공격을 진행하게 된다.

1) 정보 수집(Information Gathering)

공격자는 제일 먼저 공격 대상과 관련된 가족 관계, 직장 생활 그리고 사회 모임 등의 개인적이거나 사회적인 활동 등과 관련된 다양한 정보들의 수집을 시도하게 된다. 공격자는 이 단계에서 수집한 다양한 정보들을 다음 단계인 관계 형성(Developing Relationship)을 위해서 사용하게 된다. 일반적으로 공격자는 공격 대상과 관련된 정보들을 수집하는 기법들은 다음과 같이 나누어 볼 수 있다.

- 직접적인 접근(Direct Approach)
공격자는 공격 대상 또는 공격 대상과 관련된 사람들에게 직접적으로 접근하여 관련된 정보들을 알아내는 방법을 이야기한다. 이 방법은 공격자가 공격 대상 또는 공격 대상과 관련된 주위 인물들을 직접 방문하여 우회적인 질문을 통하여 공격 대상의 개인적이거나 사회 활동 등과 관련된 다양한 정보들을 파악하는 방식이다.

- 어깨너머로 훔쳐보기(Shoulder Surfing)
공격자는 공격 대상의 주위에서 직접적인 관찰을 통하여 그가 기업 내에서 수행하는 업무 내역과 전화 통화 내역 등을 어깨 너머로 훔쳐보면서 공격 대상과 관련된 정보들을 수집하는 방식이다.

- 휴지통 뒤지기(Dumpster Diving)
공격자는 공격 대상이 가정 또는 직장에서 무심코 버리는 메모지, 영수증 또는 업무 중 생성한 문건 등 공격 대상과 관련된 문서들을 휴지통에서 수거하여 유용한 정보들을 수집하는 방식이다.

- 설문 조사(Mail-outs)
공격자는 공격 대상의 관심을 끌만한 사항을 설문지로 작성한 후 이 설문조사를 통하여 공격 대상의 개인적인 취미, 흥미 사항, 가족 사항과 관련된 개인 정보들과 함께 동호회 활동과 같은 사회적인 활동과 관련된 다양한 정보를 수집하는 방식이다.

- 시스템 분석(Forensic analysis)
공격 대상이 사용하는 컴퓨터 시스템에 공격자는 직접적이거나 간접적인 접근을 통하여 해당 컴퓨터 시스템에 존재하는 공격 대상의 작성한 다양한 문서들 그리고 웹 사이트 방문 기록 등 온라인상에서의 활동과 관련된 다양한 정보들을 수집하는 방식이다.

- 인터넷(Internet)
인터넷에 존재하는 다양한 검색 엔진(Search Engine)을 이용하여 인터넷에 존재하는 공격 대상과 관련된 개인적인 정보 및 사회 활동과 관련된 다양한 정보들을 수집하는 방식이다.

2) 관계 형성(Developing Relationship)

1 단계인 정보 수집 단계에서 공격자는 공격 대상과 관련된 다양한 정보들을 충분히 수집하였다고 판단할 경우, 공격자는 이제 공격 대상과 직접적인 관계를 형성하기 위해 2 단계인 관계 형성(Developing Relationship) 단계로 발전하게 된다.
앞서 이야기한 바와 같이 사회 공학 기법의 인간 기반(Human Based) 또는 컴퓨터 기반(Computer Based)의 수단 들을 공격자는 적절하게 활용하여 공격 대상에게 접근하게 된다. 이 관계 형성 단계에서는 사회 공학 기법에서는 절대 빼놓을 수 없는 가장(假裝, Masquerade)이라는 것이 공격자에 의해 발생하게 된다.
가장(假裝, Masquerade)이라는 의미 자체에서 알 수 있듯이 공격자는 공격 대상에게 자신의 본 모습을 숨기고 다른 누군가로 위장하여 접근하게 된다. 이렇게 다른 누군가로 가장(假裝, Masquerade)하여 공격 대상에게 접근하는 것은 공격 대상이 가질 수 있는 경계심을 없애고 신뢰할 수 있는 사람이라는 신뢰감을 형성하기 위한 것이다. 이 신뢰감을 바탕으로 공격자는 자신이 가진 특수한 목적을 달성하기 위한 사항을 다음 단계인 공격(Exploitation)에서 요청하게 된다.
이 관계 형성 단계에서는 앞서 설명한 바와 같이 공격자는 공격 대상에게 믿을 수 있는 사람이라는 신뢰감을 심어주기 위해서 일반적으로 다음 유형의 인물들로 가장(假裝, Masquerade)하게 된다.

- 중요한 인물(Important User)
공격자는 공격 대상의 직장 상사나 정부 기관의 고위 공무원 등으로 위장한다. 공격 대상은 공격자의 이러한 가장(假裝, Masquerade)으로 인해 그가 요청하는 사항을 쉽게 거부하거나 거절하지 못하게 된다.

- 도움이 필요한 인물(Helpless User)
공격자는 공격 대상의 도움을 절대적으로 필요로 하는 인물로 위장한다. 이로 인해 공격 대상은 자신이 아니면 공격자를 도와 줄 사람이 없음으로 자신이 반듯이 도와주어야만 한다고 생각하게 된다.

- 지원 인물(Support Personnel)
공격자는 공격 대상의 기업 내, 외부의 컴퓨터 시스템 또는 관공서 등의 지원 부서 인물로 위장한다. 이러한 위장으로 인해 공격자는 공격 대상에게 현재 심각한 문제가 있음을 알리고 이를 해결하는데 자신이 도움을 줄 수 있는 인물로 묘사하게 된다.

- 역 사회 공학(Reverse Social Engineering)
앞서 설명한 방식과는 조금 다른 접근 방식인 역 사회 공학이라는 기법이 있다. 가장(假裝, Masquerade)을 이용한 기법에서 공격자는 모두 공격 대상에게 도움을 요청하는 인물들로 위장하는 것이 일반적인 유형이다. 하지만 이 역 사회 공학 기법은 공격자가 공격 대상이 모르게 미리 특정한 문제를 유발시킨 후 공격 대상이 자발적으로 공격자에게 도움을 요청하도록 만드는 기법이다. 이 기법을 통해서 공격자는 공격 대상이 가지고 있는 특정 문제를 해결함으로써 공격 대상에게 공격자 자신을 도움을 준 신뢰할 수 있는 좋은 사람으로 쉽게 판단할 수 있게 만든다.

3) 공격(Exploitation)

세 번째 단계인 공격(Exploitation)은 공격자가 수집한 다양한 정보들을 바탕으로 공격 대상과 충분한 신뢰감을 형성하였다고 판단 할 경우에 진행하게 된다. 특히 이 세 번째 단계로 넘어가기 위해서는 공격자 자신을 공격 대상이 더 이상 의심하지 않는다는 판단이 중요하게 작용하게 된다.
이러한 신뢰 관계가 충분히 형성이 되면 공격자는 자신의 특수한 목적을 이룰 수 있는 사항을 공격이라는 단계에서 공격 대상에게 요청하게 된다. 이 단계에서 공격자는 일반적으로 다음과 같은 형태를 보임으로서 공격 대상으로 하여금 자신이 요청한 사항을 쉽게 거부하지 못하도록 한다.

- 의견 대립 회피
공격자는 공격 대상에게 자신의 특수한 목적을 위한 행동을 요청할 때 공격 대상이 지적하거나 이야기하는 사항 등에 대해서 적절한 동의를 보여 공격 대상과는 다른 의견으로 인해 대립과 충돌이 발생하지 않도록 한다. 그럼으로써 공격자 자신이 요청한 사항에 대해서 공격 대상이 거부를 하지 않고 긍정적으로 수긍할 수 있는 상황을 연출하게 된다.

- 사소한 요청에서 큰 요청으로 발전
공격자는 공격 대상에게 처음부터 자신이 가지고 있는 특수한 목적에 부합하는 사항을 요청하지 않고 공격 대상이 느끼기에 사소한 문제라고 판단되는 작은 사항부터 요청하여 동의를 구하게 된다. 그 이후 점진적으로 큰 요청 사항을 이야기하여 공격 대상이 쉽게 거절하지 못하는 상황을 연출하게 된다.

- 감정에 호소
공격자는 공격 대상에게 자신의 어려운 상황을 이야기함으로써 공격 대상이 측은지심(惻隱之心)과 같은 감정을 느끼도록 만든다. 공격 대상 스스로가 자신이 아니면 공격자의 어려운 문제를 해결 해줄 수 없다는 연민의 감정으로 인해 공격자의 요청 사항을 수락하는 상황을 연출하게 된다.

- 신속한 결정
공격자는 공격 대상에게 자신의 특수한 목적을 수행할 요청 사항을 이야기할 때 의견이 대립되거나 다른 문제가 발생 할 경우, 신속하게 공격 대상과 타협을 하거나 양보를 한다. 공격자는 절대 무리하게 요청 사항을 요구하여 공격 대상과 의견이 대립되는 어려운 상황을 연출하지는 않는다.

4) 실행(Execution)

마지막 실행(Execution) 단계에서 공격 대상은 공격자가 요청한 사항에 대해 직접적인 실행으로 옮김으로써 이로 인해 실질적인 피해가 발생하게 된다. 그리고 공격자는 요청 사항으로 인해 확보한 유형의 또는 무형의 자신을 이용하여 실질적인 목적을 수행할 수 있게 된다. 이렇게 공격자의 요청을 수락하는 공격 대상은 대부분이 다음과 같은 상황으로 기인한다.

- 책임 회피
공격 대상은 공격자의 요청 사항을 수행하지 않을 경우에 자신에게 유형의 또는 무형의 어떠한 책임이 발생하게 될 것으로 생각하게 된다. 이로 인해 공격 대상은 공격자의 요청 사항을 수락하고 실행하게 된다.

- 보상 심리
공격 대상은 공격자의 요청 사항을 수행할 경우 자신에게 유형의 또는 무형의 어떠한 대가를 받게 될 것으로 판단하게 된다. 이로 인해 공격자의 요청 사항을 긍정적으로 수락하고 적극적으로 실행하게 된다.

- 도덕적 의무감
공격 대상은 공격자의 요청 사항을 수행하지 않음으로 인해 스스로의 양심적 가책을 받을 수 있다고 판단하게 된다. 이러한 도덕적 의무감으로 인해 공격자의 요청 사항을 수락하고 도와주게 된다.

- 사소한 문제
공격 대상은 공격자의 요청 사항이 아주 사소한 문제임으로 이를 수락하고 수행하더라도 크게 심각한 문제가 발생하지 않을 것이라고 쉽게 판단하게 된다. 그로 인해 쉽게 공격자의 요청을 수락하고 실행 하게 된다.


[저자] 안철수연구소 ASEC 장영준 주임연구원

[안철수연구소 2007-04-24]

다소 잊고 지냈지만 항상 즐겼던 한마디가 있다..

세상의 모든 일들이 다 이루어지기 위한 전제 조건이 있듯이..

전혀 문제 없는 권한은 치명적 권한을 위한 발판...

'Computer > 속임의 정체' 카테고리의 다른 글

RSA 알고리즘 - 본론  (0) 2007.02.15
RSA 알고리즘 - 서론  (10) 2007.01.11
AND

저번 서론에 이어 본론을 설명한닷 ㅇ_ㅇ

사실 필자의 수학 공부가 부족하고 배껴 넣기도 귀찮아서 알고리즘의 증명따위는 그냥 넘긴다
그러나 알고 싶은 분들을 위한 링크를 남기겠다
http://wizpia.com/documents/security/guardian4.html


증명을 다 넘기고 과정을 보면 다음과 같다

두개의 소수를 p, q를 구하고서

(p-1)*(q-1) 과 서로소인 수 e를 하나 구한다 이것을 공개키 e라 부르자.

그리고 (e * d) - 1 mod (p-1)*(q-1) = 0 인 d를 구한다. 이것을 비밀키 d라고 하자.

여기에서 왠지 모를 정리에 의해

암호화시킬 코드의 e 제곱을 (p*q)로 나눈 나머지 값과 (p*q)값, 그리고 비밀키 d로 암호화 시킬 코드를 복호화할 수 있다.

즉, 우리가 암호화 할 코드를 n 이라 하고,

ne승을 p곱하기 q로 나눈 나머지 값을 m이라 하자

그럼, m의 d승을 p곱하기 q로 나눈 나머지 값이 n이 되는 것이다


정리해보자

일단 p*q 값(p곱하기q)은 복잡하므로 이를 r이라고 부르겠다.

암호화에 필요한 것은 원래 값 n 그리고 공개키 e값과 r값. 그래서 나온 암호문이 m.

복호화에 필요한 것은 암호문 m과 그리고 비밀키 d값과 r값. 그래서 나온 복호문이 n.

상당히 간단하다 일단 단순한 숫자 암호를 암호화하고 복호화하는 것에 몇라인 들어가지않는다

crypt(n, e, r) { return (n^e) mod r; }
decrypt(m, d, r) { return (m^d) mod r; }

물론, 실제로 적용하자면 키 생성부분과 전송하는 부분과 암호화할 데이터를 블럭화하거나.. 어째꺼나 많이 늘겠지만, 원리는 위와 같이 간단하다.


암호의 쓰임새는 서론에서 말했었던거 같다. 음 예제까지 정리하기는 귀찮고..

그냥 몇가지 아마 예제를 구현하며 공부할 사람에게 필요 할지도 모르는 것들을 올려놓겠다..


RSA 알고리즘
꽤나 자세히 설명되어 있다. 웹에 찾아보면 많은데 다 거기서 거기인듯 하다. 나름 수학기호도 깔끔히 되어있다.
http://wizpia.com/documents/security/guardian4.html

RSA 암호 연습
실제로 자바스크립트로 간단한 RSA 암호화-복호화 과정을 실습해 볼 수 있어서 막막하다 싶을때 끄적거리기 좋다. 살짝 예외처리가 안되있는 경우도 있지만 잘 구현해 놓은 것 같다. 다 거기서 거기인 평범한 글로 설명되어 있는 보통의 사이트들과 사뭇 다른 사이트.
http://cissoft.dju.ac.kr/amho/sub/training/rsa.html

BIG_INT_LIB

큰 수를 다루도록 해준다
제곱 연산을 하는만큼 엄청 큰수에 대한 연산이 필요할 수도 있다
사실 글 쓴 녀석은 빅인트 라이브러리에서 제공하는 big_int_powmod() 함수를 이용해 제곱과 모듈러를 구현했다.
http://valyala.narod.ru/big_int/

RSA 키 생성기

조금 버벅이기는 하지만 잘 만들어지는 것 같다
http://hc.pe.kr/

소수 모아논 헤더

그다지 쓸 모 없어 보이긴해도 간단한 용도로나 예제같은걸 해보는데에 쓸만할지도..



'Computer > 속임의 정체' 카테고리의 다른 글

사회 공학 기법의 공격 흐름 (Social Engineering)  (0) 2007.04.26
RSA 알고리즘 - 서론  (10) 2007.01.11
AND

요새 공부한.. 공부하고 있는 알고리즘 ' '
대략 간단한 '유클리드 호제법'(Euclid's Algorithm), '페르마의 소정리'(Ferma's Little Theorem) 등을 이용한 소위 매우 간단한 알고리즘.
간단히 설명하면 암호화하는 키와 복호화하는 키가 다른 암호화 방식이랄까..

매우 매력적이다
특히 네트워크 상에서 누군가 패킷을 스니핑 한다 해도 소용이 없다
상당히 재미있다 혹시 모르시는 분들을 위해 설명을 간단히 하고 넘어가겠다

A 와 B 가 있다.
A 는 B 에게 뭔가 암호화된 중요한 자료를 주고 싶다.
A 는 B 에게 키를 달라 한다.
B 하나의 키 쌍을 만들어 암호화 할 수 있는 키를 A 에게 준다. (한 쌍 == 암호화키 + 복호화키)
A 는 B 에게 받은 키를 이용해 자료를 암호화 시킨다.
A 는 암호화 된 자료를 B에게 보낸다.
B 는 받은 암호화된 자료를 아까 자신이 만들었던 키 쌍중 복호화를 위한 키를 사용해 복호화한다

여기서 주고 받은 것을 정리해 보면 다음과 같다
A -> B : 키를 달라는 요청
B -> A : 암호화를 위한 키
A -> B : 암호화된 자료
즉, 복호화를 위한 키가 공개되지 않으므로 B외에는 이 암호화를 풀 수 없다.

근대 한가지 짚고 넘어갈 것이 있다
RSA 말고 다른 수학적 방법들로도 암호화를 위한 키와 복호화를 위한 키를 따로 만들 수 있다
그런데 왜 사용을 않는가??
암호화를 위한 키를 이용해 복호화를 위한 키를 추측할 수 있기 때문이다.
예를 들어 +1 이란 키가 암호화키였다면 복호화키는 -1 이 되는 거다
이것은 알고리즘이 공개되어있기 때문에 당연한 일이다
그런데.. 왜 RSA는 강력하다 하는가??
이는 키를 만드는 방식에 있다 (== 이 말의 뜻이 결국 알고리즘의 전체를 표현하는거겠지만ㅋ)

'Computer > 속임의 정체' 카테고리의 다른 글

사회 공학 기법의 공격 흐름 (Social Engineering)  (0) 2007.04.26
RSA 알고리즘 - 본론  (0) 2007.02.15
AND