기사 요약

1) 방통위에서 SNI 필드 차단 기술을 통해 https 보안 프로토콜을 사용하는 불법사이트로의 접속을 차단

2) 인터넷 검열국이 되는 것이냐며 인터넷 이용자의 불만의 목소리가 점점 커짐.

3) 패킷의 내용 자체를 들여다 보는 것은 아니나 패킷의 목적지를 확인하는 행위만으로도 이용자의 자유도가 하락함 

4) 불법을 근절하기 위한 고육지책인가, 개인의 자유를 침해하는 잘못된 제도인가

5) 세계적으로도 과도한 심의정책으로 이미 제한적인 인터넷 자유국으로 분류됨.




KT를 시작으로 SK와 LG U+ 등 인터넷 서비스 업체(ISP)의 불법사이트의 https 접근을 차단하는 제도가 시행되었다.


기본적으로 https는 패킷의 내용을 암호화하여 전송하기 때문에 패킷의 내용을 볼 수가 없다. 볼 수는 있어도 깨져있을 뿐..


그렇다면 어떤 방식으로 차단을 하는 것일까? 


여기서 SNI 기술을 알아보자.


Server Name Indication의 약자로 TLS의 확장 표준 중 하나이다.


기본적으로 도메인 하나 = IP 하나로 알고 있지만 최근에는 하나의 IP에 여러 개의 도메인을 연결하는 서비스가 대중화되었다.


https는 클라이언트가 사이트에 접속할 때 안전한 접속을 하기 위한 인증을 진행하는데, 인증서를 사용한다. 하지만 IP 하나에 여러 사이트를 사용하니 인증서 관리에 문제점이 생겼고, 그로 인해 SNI 기술이 나오게 되었다.


SNI 기술은 여러 사이트를 서비스하는 웹서버의 경우에도 인증서를 통해 https를 사용할 수 있다. 즉, 서버와 클라이언트간의 인증 기술인 셈.


그렇다면 이 기술을 어떻게 활용하는 것인가?


기본적으로 https을 사용하면 서버-클라이언트간의 통신은 암호화하지만 SNI를 통한 인증 과정은 암호화되지 않고 평문으로 전송 된다. 그리고 이 인증 과정에서 주고 받은 SNI 패킷에 기록된 도메인을 보고 차단여부를 결정하는 식으로 이용하게 되는 것이다. 


SNI 패킷의 평문 전송은 제3자에게 쉽게 노출되어 보안상의 문제가 있었으며, 2018년 9월에 암호화한 SNI(Encrypted SNI) 서비스를 시범적으로 개시했다.


결국 DNS에서 내용을 확인하고 전달해줘야하는데 이 과정 전에 암호화를 하기 때문에 별도의 DNS 서버가 필요하다. 그래서 클라우드플레어라는 기업의 DNS 서비스를 이용해야한다. 


다만 문제는 이 클라우드플레어를 이용 중인 사이트의 경우에만 접속이 가능하다는 것이다. 이용하지 않는 사이트는 클라이언트가 ESNI를 이용하더라도 접속할 수가 없다. 아직 시범단계인 기술이기 때문에 비표준인 ESNI의 도입은 시간이 걸릴 것이다.



이 제도 시행 후 인터넷 커뮤니티에서는 격렬한 반대의 말들이 많다. 말이 불법사이트 단속이지 인터넷 검열- 사생활 감시로 이어지는 것으로 느낄 수 밖에 없기 때문이다. 이 제도가 확대 시행되면 불법적인 사이트 근절 외에도 사용하는 주체에 따라 이용하는 민간인의 사찰도 가능하기 때문이다.



그렇다면이 차단을 우회하는 방법은 없는가?


늘 그렇듯 방법은 존재한다. 가장 확실한 방법은 VPN을 이용해 모든 통신 과정을 암호화 하는 것이다. 



계속...




새로운 랜섬웨어 '아나토바(Anatova)'의 등장


#탐지를 피해 암호화 시작, 백업 파일은 10번 덮어쓰기로 복구 불가 상태로 만듦



▶새로운 랜섬웨어 아나토바의 등장으로 미록을 비롯한 9개국 이상에서 다수의 피해자 양산


  - 맥아피(McAfee), 난독화 기능이 뛰어나고 네트워크 공유자원까지 감염시킬 수 있는 아나토바의 등장에 대해 경고

  - 모듈 구조, 공격자들이 추가로 기능을 덧붙일 수 있음



▶비밀 P2P에서 처음으로 발견, 사용자들이 의심하지 않고 다운로드 받도록 하기 위해 게임이나 앱 아이콘으로 위장


  - 사전 탐지를 피하기 위해 다양한 행동을 취하며, 감염된 시스템 내에서 최대한 많은 파일을 찾아내 암호화

  - 이후 사용자에게 700달러 상당의 암호화폐를 송금하라는 협박 메시지를 띄움



아나토바 동작방식


 1) 샌드박스 환경에서 실행되는 것을 막기 위해 가상 기계 탐지 절차 수행


 2) 특정 국가*에서 피해를 일으키지 않도록 국가 설정 내용 확인

* 시리아, 이라크, 인도 및 이전 소비에트 연방 소속국가 등


 3) 1MB 이하의 파일들과 네트워크 공유 자원을 찾아 암호화



▶아나토바는 랜섬웨어 샘플마다 고유한 키를 가지고 있기 때문에 마스터키가 존재하지 않음

 

  - 이는 피해자마다 각각 다른 키를 확보 해야만 감염된 파일을 복구할 수 있음을 의미

  - 이후 메모리를 비워 랜섬웨어 정보를 파악할 수 있는 내용을 삭제, 백업파일을 10회 이상 덮어쓰기 하여 복호화 키 없이는 복구할 수 없도록 함

  - 맥아피는 아나토바가 완성형 멀웨어가 아닌 프로토 타입으로 추정 중, 이후 진화한 랜섬웨어 공격이 실행될 것으로 예상



시사점


▶ '18년의 경우 다른 종류의 위협이 늘어나 랜섬웨어의 빈도가 주춤한 것으로 보이지만, 현재도 랜섬웨어 공격은 활발하게 진행중인 것으로 파악됨


▶ 공격 예방을 위해 의심되는 파일 열람 금지 및 오프라인 백업 등의 조치가 필요





샌드박스 환경에서 실행되는 것을 회피할 수 있는 랜섬웨어라니 탐지하는 것도 쉽지 않겠다. 연구해보고는 싶지만 일하면서 마주치고 싶지는 않은 녀석이다 ㅋㅋㅋ



좋은 장비, 뛰어난 보안인력확보이 안전을 보장하지 않는다. 사용자 스스로의 보안 의식이 지킬 수 있다.


위협은 언제나 가장 취약한 곳으로부터 찾아온다는 것을 잊지 말자.


'보안동향 > KrCERT' 카테고리의 다른 글

Windows URL 실행 예약 방법(초간단)  (1) 2019.07.12

보안기사 필기 시험이 40일 앞으로 다가왔다.

그동안 찔끔찔끔 준비해왔지만 이제는 정신차리고 준비해야겠다. 6주 안에 뿌수자!


2019년 들어 출제 유형이 바뀌기는 했지만 대세에 영향을 주는 정도는 아닌 것 같다.


정보보안기사 관련 보안뉴스 기사 -> 링크


변경된 출제 기준은


1. 현재에 맞는 단어로 수정

2. 시스템 보안 항목에서 운영체제 단원이 제외

3. 과목별 최신 보안 동향 포함

4. 사이버보안 윤리 필기에 포함


이정도로 정리할 수 있다.


운영체제 단원은 점수 따기 쉬운 곳이었는데 아쉽다. 결국 최신 동향과 사이버보안 윤리 쪽에서 메꿔야 할 듯 싶다.


최신 보안 동향은 보안뉴스를 꾸준히 읽고 KISA KRcert 홈페이지를 주기적으로 확인하는 것이 중요하다. 어차피 2019년 알기사를 구매한다고 해서 그것이 절대적인 기준이 될 수는 없으니까.

아마도 갠드크랩과 채굴 악성코드는 한 번쯤 나올 것 같다.


사이버보안 윤리는 어떻게 나올지 잘 모르겠다. 평소에 도덕적으로 살더라도 가끔 틀리는 것이 윤리니까...




두 번째로 현재 진도 상황.


기출문제 1200제를 가지고 적어도 2번은 풀어볼 필요가 있을 것 같다. 현재 1회차 510번까지 풀었으니 꾸준히 풀어준다면 가능할 것 같다.


암호학이 꽤나 골칫거리다. 네트워크도 오래 전에 봤던 것을 토대로 풀다보니 오답률이 꽤 높은 수준. 우선은 이 두 과목을 중점적으로 채워야겠다.


매일은 아니더라도 주기적으로 공부 상황과 오답, 용어 정리를 블로그에 올려서 내 데이터를 만들어야겠다.


얼른 보안기사 끝내고 CPPG로 넘어가고 싶다... 


글을 어떻게 마무리 해야하지?...


스타벅스 아메리카노 맛없다.

2편과 이어집니다.


1편 링크

2편 링크



노드 탐색

링크드 리스트가 가진 약점 중 하나. 배열이 인덱스를 이용해 원하는 정보에 접근하는 반면 링크드 리스트는 헤드에서 포인터를 이용해 하나하나 건너가야한다.


노드 탐색 함수 예

Node* SLL_GetNodeAt(Node* Head, int Location)

{

Node* Current = Head;    //Head에서 탐색을 시작


while( Current != NULL && (--Location) >= 0)    //현재 노드의 포인터가 NULL이 아니고 Location이 0보다 크거나 같음을 만족하는 동안

{

Current = Current->NextNode;    //포인터를 통해 다음 노드로 이동

}

return Current;    //while 종료 후 현재 노드를 반환

}


함수 적용

MyNode = SLL_GetNodeAt (List, 1); //두 번째 노드의 주소를 MyNode에 저장




노드 삭제

링크드 리스트 내 임의의 노드를 제거하는 연산. 삭제하려는 노드B를 찾은 후 다음 노드C를 이전 노드 A의 포인터에 연결하면 된다.


노드 삭제 함수 예

void SLL_RemoveNode(Node** Head, Node* Remove)

{

if(*Head == Remove)

{

*Head = Remove->NextNode;    //삭제할 노드가 헤드일 경우 다음 노드를 헤드로 지정

}

else

{

Node* Current = *Head;    //Head에서부터 탐색 시작

while (Current != NULL && Current -> NextNode != Remove)    //현재 노드의 포인터 값이 !=NULL, 다음노드가 !=Remove일 동안

{

Current = Current -> NextNode;    //다음 노드로 이동

}

if(Current != NULL)

Current->NextNode = Remove->NextNode;    //현재 노드가 NULL이 아니면 삭제할 노드의 포인터 값을 현재 노드에 입력

}

}


삭제할 노드의 앞 노드까지 이동 후 앞 노드의 포인터에 삭제한 노드의 포인터(즉, 다다음 노드의 주소)를 대입해준다.


함수 적용

SLL_RemoveNode (&List, MyNode); //위에서 탐색한 노드를 제거.


SLL_DestroyNode (MyNode); //제거한 노드를 메모리에서 완전히 소멸


노드 삽입

노드와 노드 사이에 새로운 노드를 끼워넣는 연산.


노드 삽입 함수 적용 예

void SLL_InsertAfter(Node* Current, Node* NewNode)

{

NewNode->NextNode = Current->NextNode;    //현재 노드가 가진 포인터 값을 새 노드의 포인터에 대입

Current->NextNode -> NewNode;    //새 노드의 주소를 현재 노드의 포인터에 대입

}



노드 갯수 세기

링크드 리스트 내에 존재하는 노드의 수를 세어 결과를 반환하는 함수로 만들 수 있다.


노드 갯수 세기 함수 적용 예

int SLL_GetNodeCount (Node* Head)

{

int Count = 0;

Node* Currernt = head;


while (Current != NULL)

{

Current = Current->NextNode;

Count++;

}


return Count;

}


보안에 입문하면서 가장 흔히 접하는 직업군이 몇 가지 있습니다.


"모의해킹, 악성코드 분석, 보안관제"


오늘은 그 중 보안관제에 대해서 써보고자 합니다.

취업을 준비하는 학생의 입장에서 바라본 글이기 때문에 현업과 동떨어져 있을 수도 있으니 개인적인 사념정도로 가볍게 읽어주시면 감사하겠습니다.

혹, 현업에 계신 선배님들이나 더 많은 지식과 정보를 가지고 계신분이 이 글을 읽어주신다면 감히 지적과 조언을 여쭈니, 말씀해주시면 겸허히 수용하겠습니다.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------

관제는 흔히들 '보안의 최전방'이라고 표현합니다. 군대로 따지면 최전방 GOP 근무를 서는 업무와 유사합니다. 이상 징후를 24시간 365일 감시하는 형태의 근무이기 때문에 교대근무로 이루어집니다. 때문에 상대적으로 다른 직군들보다 피로도가 높고, 그에 반해 급여는 높지 않은 직군이라고 합니다.


보안업계 자체가 급여가 높은 편이 아니라는 것은 여러 기사를 통해서도 접할 수 있습니다. 여러 교육 과정들을 통해 멘토분들과 강사님들을 만나면서 듣는 소리 중 가장 많이 하시는 말씀이


'보안은 돈을 벌기 힘들다.'

'왜 보안을 하세요?'

'보안관제가 목표시면 그냥 나가서 이력서를 넣어야지, 교육을 굳이 듣지 않아도 됩니다.'

입니다.


물론 관제의 필요성과 매력에 대해서 적극적으로 어필하시는 분들도 계십니다. 하지만 힘들고 굳은 일을 하는 곳이라는 이미지는 쉽게 벗기 힘들 것 같습니다. 실제로도 그러니까요.


관제는 네트워크상의 데이터를 수집하고 분석합니다. 장비가 이상징후를 탐지하면 가장 빠르게 대응하는 역할도 합니다. 외부의 침해로 인한 피해를 최소화 하기 위해 반드시 필요한 직군입니다. 요즘은 보안기술이 발달하는 만큼 공격기술도 발전하기 때문에 더욱 필요성이 대두되고 있기도 합니다.


관제는 크게 원격관제와 파견관제로 나뉩니다. 주로 보안업체에서 인력을 도급하는 형태로 이루어지고, 일반적인 기업이 관제 인력을 별도로 모집하지는 않습니다. 


원격관제는 굳이 내부에 외부인력을 두지 않고 저렴한 단가로 서비스를 제공받을 수 있는 장점이 있습니다. 다만 원격인만큼 서비스 제공이 한정적이고, 장애가 발생하거나 침해사고가 생기면 즉각적인 대처를 하기 어렵다는 단점이 있습니다. 


파견관제는 말그대로 해당 업체에 인력을 파견하는 형태로, 고객사에 맞게끔 서비스를 제공할 수 있는 장점이 있습니다. 고객사와 관제인력간의 의사소통도 빠르게 이루어 지기 때문에 장애가 발생해도 빠르게 대처가 가능합니다. 다만 그만큼의 인력 관리와 높은 단가에 대한 부담을 가지고 있습니다.


[그림1]보안관제 프로세스(출처: 이글루 시큐리티)


위 도식과 같이 관제의 프로세스는 네가지로 분류됩니다.

평시 모니터링을 진행하다가 이벤트가 발생시 관제요원이 초기 대응을 진행하고, 침해대응팀과 함께 이벤트에 대한 자료를 분석합니다. 이후 분석 결과를 토대로 복구를 진행하고 대응방안을 수립한 후 보고서를 통해 고객사 담당자와 협의해 동일한 이벤트로 인한 침해 재발을 방지합니다. 


이러한 침해 대응에서 중요한 것이 로그 분석입니다. 로그 분석은 외부 침입으로 인해 어떤 피해가 일어났고 어떤 동작을 했는가, 어디에서부터 유입되었는가를 판단할 수 있는 중요한 자료입니다. 이러한 로그를 통합적으로 분석할 수 있는 도구들도 무료/상용버전으로 많이 배포되고 있습니다.



오늘은 면접 준비로 인해 짧게 관제가 무엇인지에 대한 이야기만 적었습니다.


다음 시간에는 본격적으로 교육 과정 때 이수했던 로그분석 내용들을 적으면서 스스로도 되짚어 보는 시간을 가져야겠습니다.


감사합니다. 또올게요 :)

1편과 이어집니다. 

1편 링크


노드 생성


 메모리 종류


   정적 메모리

전역 변수나 정적 변수 등이 저장되는 곳. 프로그램 종료 시 해제 되는 영역.


   자동 메모리

코드 블록 '{}' 이 종료되면 소멸하는 영역. 함수 등.


   자유 저장소

프로그래머가 자유롭게 메모리를 할당 및 사용. 안전하게 해제해야할 책임을 가짐.


malloc()

   자유 저장소에 메모리를 할당하는 함수. void* malloc(size_t size);

   void*은 어떤 자료형도 가리킬 수 있다. 만능. 

   Node* NewNode = (Node*)malloc(sizeof(Node));


노드 생성 함수 예시

Node* SLL_CreateNode(ElementType NewData)

{

Node* NewNode = (Node*)malloc(sizeof(node));

{

if ((*Head) == NULL)    //헤드 노드가 NULL이라면 새로운 노드가 Head가 된다.

NewNode->Data = NewData;

NewNode->NextNode = NULL;


return NewNode;

}


*SLL은 Singly Linked List라는 의미. Double Linked List와 구분하기 위해 명명.


   노드 소멸은 free(Node)를 사용한다.


노드 소멸 함수

void SLL_DestroyNode(Node* Node)

{

free(Node);

}



노드 추가

테일 노드 뒤에 새로운 노드를 만들어 연결하는 것

기존 테일 노드의 포인터는 신규 테일노드를 가리키게 하고 신규 테일노드의 포인터는 NULL값을 가진다.


노드추가 함수 예시

void SLL_AppendNode(Node** Head, Node* NewNode)

{

*Head = NewNode;

}

else

{

Node* Tail = (*Head);        //테일을 찾아 NewNode를 연결.

while (Tail->NextNode != NULL)

{

Tail = Tail->NextNode;

}


Tail->NextNode = NewNode;

}

}



  위와 같이 구현한 Append함수는 리스트를 만들어 사용합니다.

Node* List = NULL;

Node* NewNode = NULL;


NewNode = SLL_CreateNode (117);    //자유 저장소에 노드 생성

SLL_AppendNode(&List, NewNode);    //생성한 노드 List에 추가


NewNode = SLL_CreateNode(119);    //자유 저장소에 또다른 노드 생성

SLL_AppendNode(&List, NewNode);    //생성한 노드 List에 추가


Append함수의 매개변수 중 Node**로 선언된 이유

Node*로만 포인터를 지정하면 List포인터가 담고 있는 주소값만 복사된다. 여기서는 LIST변수 자체의 주소가 필요하다.



리스트?

리스트는 배열을 사용함에 있어 파일의 수를 예측할 수 없다는 점을 해결하기 위한 방법이다. 배열과 다르게 크기를 유연하게 다룰 수 있는 자료구조.



링크드 리스트(Linked List)

리스트를 구현하는 가장 간단한 방법.

리스트 내 각 요소를 노드(Node)라고 함. = 마디

리스트는 이러한 노드를 연결해서 만드는 것.


하나의 노드에는 데이터 영역과 다음 노드의 주소를 가리키는 포인터로 이루어져있다.


이러한 노드를 하나로 엮은 것이 링크드 리스트다.


리스트는 헤드와 테일을가지고 있다. 말그대로 리스트의 가장 첫 부분과 마지막 부분이다. 새로운 노드를 추가하더라도 새로운 노드가 테일이 되어 시작과 끝을 쉽게 알 수 있다.


중간에 노드가 사라지더라도 앞쪽 노드의 포인터를 소멸한 노드의 뒤쪽 노드의 주소 값으로 변경해주기만 하면 된다.



C언어로 표현한 노드 구조체

typedef struct tagNode

{

int Data;    //데이터 필드

struct Node* NextNode;    //다음 노드를 가리키는 포인터

}Node;


typedef를 사용해 구조체를 정의했다.

typedef로 구조체를 선언하면 키워드 없이 편리하게 사용할 수 있다.


Node NewNode;

이렇게.



주요 연산

링크드 리스트는 다섯가지 연산을 필요로 한다.

- 노드 생성 / 소멸

- 노드 추가

- 노드 탐색

- 노드 삭제

- 노드 삽입


이러한 자료구조를 유지하고 사용하기 위해서는 포인터를 수월하게 사용할 수 있어야한다.




안녕하세요. 지크입니다. 지난 금요일에 정보처리기사 실기 시험 결과가 나왔네요.


바로 결과부터 확인하시죠.




뙇!! 필기 2번, 실기 2번 총 4번의 도전 끝에 합격했습니다. 길었다...


따고 나니까 뭔가 허탈하기도 하고 뿌듯하기도 하고, 여러가지 기분이 드네요.



이번 시험 난이도는 1, 2회와 비교해 조금 높았던 것 같아요.


기사 기준

1회차는 53.8%

2회차는 65.2%의 합격률을 보였는데


이번 3회차는 34%로 지난 시험보다는 어려웠나 봐요.


사실 2017년 3회차의 극악의 난이도를 한 번 맛봐서 그런지 개인적으로는 수월하게 풀었습니다.


점수는 83점이었어요. 가채점 때는 73점 정도 예상했는데, SQL과 C언어에서 가점을 좀 받은 것 같아요. 뿌-듯!


공부를 어떻게 했나!


8월 / 1~5과목 정주행(기사퍼스트 인강과 함께 했습니다.)

사실 알고리즘과 SQL 외에 다른 강의는 굳이 듣지 않고 외우기만해도 충분합니다.


그리고 9월 2주간은 자격증 외에 다른 공부를 하고, 마지막 2주간 또 달렸습니다.


알고리즘과 SQL이 확실하게 받쳐주지 못하면 다른 거 잘해도 힘들더라구요. 그래서 이번에는 확실히 두 개를 잡기 위해 집중했습니다.


마지막 3일 중 이틀은 신기술과 업무프로세스에 집중했구요. 시험 당일 새벽에 시험장 근처 24시 카페에서 마지막 최종 5시간 공부하고 갔어요. 간절간절...


시험 전 항상 고카페인 음료를 마시고 들어갑니다. 각성효과를 누리기 위해..(풀도핑!)


다음은 정보보안기사네요. 1월부터 차근차근 준비해봐야겠습니다.


보안기사를 5주만에 합격했다는 괴물들의 '썰'을 들었는데, 일반인인 저는 그냥 꾸준히 하는 걸로 쇼부를 봐야겠어요 :D



합격하신 분들, 축하드립니다.



+ Recent posts