Python 공부를 마음먹고 시작했다. 사실 이전에도 설치는 정말 여러번했다. 이번에는 제대로 공부해보려고 한다.

요 며칠 입력해가며 테스트 했던 파이썬 코드들이다.

##모든 언어의 시작은 Hello라고 한다. 예전에는 Hello World!였었지...

반갑다 파이썬, 오늘 블로그는 노트북의 터치패드로 마우스를 대신하니

편집이 굉장히 번거롭다^^




 

 import turtle

-> turtle이라는 모듈(추가 기능, 정의된 사전 기능 정도로 이해를 하자.)을 사용하겠다고 선언한다.

as t

여기서 turtle이라는 모듈을 불러왔을 때 turtle을 t로 간략하게 입력하여 사용할 수 있도록 정의 한다.


아래의 "t.XXXXXXX" 들은 turtle이라는 모듈에서 추가적인 정의된 명령어(함수)를 사용하겠다는 의미이다.


여기서 forward는 앞으로 전진이며, left는 왼쪽으로 120도(각도)를 의미한다. 

즉 위의 부분은 빨간색으로 삼각형을 그린다.


아래의 green부터는 녹색으로 사각형을 그리는 것이다.




 

 #간단하게 더하기 / 곱하기 / 나누기 / 지수승 / 나머지 값을 구하는 값이다. 여기까진 쉽다. 




 

 역시 turtle 모듈을 불러와 t로 사용하기로 정의했다.

그리고 변수를 배우기 시작했다.


여기서 f라는 변수에 100이라는 값을 입력하고

이동 거리를 숫자 100이 아닌 f로 주어 f에 저장된 값만큼

이동하도록 테스트 한다.

물론 하단의 left도 당연히 변수로 지정하여 값을 대체 하는 것이 되겠지...



 

반복문이 시작되었다. 나의 대학생활 코딩은 for에서 멈췄었는데...이번에는 그 벽을 넘어야지..

Hello!를 10번 출력한다.


 

 

x라는 변수에 range(범위) 3이라는 값을 넣었고 
아래의 값들을 3번 반복하는데
포인트는 300을 출력하는 위치는 자리수가 달라
100
200을 세번 출력 후 
다음 줄에 300을 출력한다.



 

 그래서 자릿수를 맞춰서 출력하는걸 테스트 해봤다.

이건 예제 책자에 없다. 나는 응용하고 싶다.

"기초"로 배운 것을.



 

 자, 변수와 반복문의 섞이기 시작했다.

- 위의 3의 변수는 x에 넣고 for문에 의해 3번 반복되는데
그것은 하단의 t.모듈로드에 의해 120도 각도로 한 변이 100 짜리인 삼각형이 완성된다.

당연히 그 하단은 사각형이 되겠지?




 

 원래 이건 1~10까지 55가 계산되고,

이번의 s값이 무엇인지를 출력하는 것이다.

위에 Original이라는 의미로 붙였다. 사실 아래에 있어서 의미없지만 공부할겸 붙여봤다. 이번에 실행되는 S가 몇 번째인지 구분 하기 위해서.

X에 몇번째인지 입력되고 s에 지속적으로 합산되는 숫자가 출력




 

 

shape는 모양을 바꾸는 것이다.
삼각형과 사각형을 각각의 크기로 그릴때
화살표와 거북이 모양으로..
그냥 뭐 학습정도로...



 

 

이건 내가 그냥 책자에 있는 함수? 들을 보며 만들어봤다.
여러 색상과 펜의 굵기를 조절하고, 장난 질 쳐봤다.



 

 이거는 n의 값을 바꿔가면서 선을 그리는 거였다.

t.fd()의 숫자 값이 클수록 선이 길어진다.

그리고 n의 값이 커질수록 각도 변화가 일어난다.

n의 값과 fd의 값이 같이 커지면 난감..창을 벗어나서 그려버린다.




 

 어제까지의 테스트의 마지막.

80 짜리 지름의 원을 파란 바탕에 흰색으로 

speed(0) 최대 빠른 속도로 그린다.

여기서 원이 조금씩 움직이면서 겹쳐지며 그려져

만들어지는 코딩.

여기까진 아직은 쉽다.







업무 경력을 쌓아가면서 느낀 것들 중 한가지가 바로. 이대로만 나아가서는 안된다. 였고, 언어에 대한 능력의 필요성을 느끼게 되었다.

그래서 나는 그 중 파이썬을 공부하기로 마음먹었다. 

대학교때 지독히고 포기하고 싶었고 실제 포기했었던 언어를 다시 이제와 필요성을 느끼고 공부하게 될 줄이야..

설치는 간단하다.

1. Python Install

https://www.python.org/downloads/ 

  경로로 이동한다(클릭하면 새창이 열린다.)


2. 파이썬 설치를 누른다. 여기서 빨간색 박스의 Add PATH는 환경변수에 파이썬의 경로 정보를 자동으로 입력하여 줌으로써 cmd나 powershell 어디에서든 파이썬의 명령을 실행할 수 있게 도와준다. 나는 추가 했다.


3. 설치를 진행한다. 기다려주자.


4. 설치가 완료되고 나면 아래 "Disable path length limit"도 클릭하여 주자

-> PATH의 길이 제한을 없애준다.


5. 그리고 "Close"를 눌러 끝낸다.


6.Windows 10(RS4) 환경에 설치를 하였다. 최근 추가한 앱으로 표시된다. 


7. 파워쉘을 실행하였고 정상적으로 파이썬이 설치되었는 지 확인할 수 있게 도와주는 명령어이다.

- python --version(path에 추가하였기 때문에 바로 입력해도 된다.)


8. 버전 명령을 통해 실행 정상 확인 후 "django"를 설치하기로 한다.

- 파이썬의 추가 플러그인 개념이다.

- 나는 파이썬을 통해 웹 페이지를 하나 만들 것이기 때문에 django의 도움을 받을 예정이다.(누가 알려주더라 파이썬+django조합) 

- 아직 나는 django는 1도 모른다^^ 일단 설치 한다.

- pip install django


9. 설치를 지켜본다.


10. 이름을 "itwin"으로 추가하였고,  "python manage.py runserver" 로 django를 실행한다.

아래와 같은 화면을 그대로 두고 웹 브라우저를 하나 실행한다.


11. 주소 입력창에서 "127.0.0.1:8000" 루프백 주소에 8000번 포트를 ":(콜론)"을 붙여 입력한 뒤 아래와 같은 화면이 나타나면 성공.




##################################아래는 mysql도 설치하였는데 메모 해둔 것 뿐...###############################

3. mysql 설치

C:\mysql>cd bin

C:\mysql\bin>mysqld --install

Service successfully installed.

C:\mysql\bin>mysqld --initialize

C:\mysql\bin>mysqld

C:\mysql\bin>mysql -u root -p

Enter password: ************

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 8.0.11


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qhdks00!@';

Query OK, 0 rows affected (0.11 sec)


mysql> quit

Bye


C:\mysql\bin>

4. Python with zango

작성 진행중...


파이썬 실수 사항

- import turtle을 진행할때

모듈을 불러와야 하는데 동일 명의 파일이 로컬 경로에 존재하여 자꾸 에러나 날 수 있다.


최근,

파트장으로서 파트원 개개인 별 정보보안기사 실기 까지 최종 패스를 목표로 개인의 실력을 가늠할 겸 철저히 주관식 문제를 만들어 보았었다.

해당 문제들에 대한 풀이를 작성해 보고자 한다.

  1. Denial of Service(이하 DoS) 에 대해서 간략히 설명하고, DoS 의 공격 종류 대표적 6가지를 간단하게 설명하시오.

우선 DoS란 DoS 뒤에 Attack을 붙여 DoS 공격 등으로 많이 이야기 한다.

말 그대로 서비스의 거부. 정상적인 서비스 제공을 방해하는 공격 또는 행위를 의미.

  • 여기서 서비스는 주로 여러분이 컴퓨터의 설치된 어플리케이션을 통해. 또는 브라우저를 통해 이용하는 네트워크 기반으로 제작된 어떤 컨텐츠를 이용하는 모든 것을 포함한다.

내가 늘 강의 때 "DoS" 를 설명하는 이유는 다음과 같은 이유에서이다.

  1. "기본 또는 표준(여기서는 DoS가 되겠다.)"을 이해해야 응용이 되는 공격 행위를 이해하기 쉽다.

DoS를 이해하고 D(istributed)DoS, Dr(eflect)DoS 등을 이해하는 것은 쉬우나 아무것도 모르는 상태에서 DDoS, DrDoS만 접하고 이해하고자 한다면 당연히 어려울 수 밖에 없다.

IT 중 정보보호 분야를 업으로 살아가지만, 늘 어려운 점은 그거다.

  • IT를 함에 있어서 새로운 공부를 하기 위해 "A"라는 용어를 이해하기 위해서 "B"라는 용어를 이해해야 하고, "B"를 다시 이해하기 위해서 "C"를 이해해야 하는 용어의 끝없는 이어짐....
  • 그 점이 IT에 있어서 가장 힘든 점이 아닐까 한다.(물론 어디든 다 고만고만하겠지..)
  • 아울러 많은 단축용어들이 그 원문의 뜻을 해석해보면 이해해 도움이 되는 것도 많다.

각설하고 DoS란 제공되는 어떠한 서비스를 정상적으로 이용하지 못하도록 하는 공격 또는 행위를 말한다면, 기본적으로 "정보보호개론"등의 도서에 포함되는 DoS 는 다음 6가지를 대표적 행위로 설명들 한다.(전부가 아니라 대부분 설명할 때...물론 더 있다.)

  1. ARP Spoofing

  2. Ping Of Death

  3. SMURF

  4. LAND Attack

  5. TCP Syn Flooding

  6. Tear Drop

위 6가지는 다른 응용된 요즘의 공격들을 이해하기에 앞서 필수적으로 학습하고 이해하는 것이 필요하다고 판단된다.

금일 자료에서는 해당 내용에 대해서 각 세부적으로 Packet Dump 된 내용들을 본다던지 하는 등을 하지는 않을 것이다.

사실 위의 6가지를 이해함에 있어서도 OSI  7 Layer를 어느정도 이해하는 부분은 필요하다. 그 점은 위에서 언급했던 것과 같이 "A"를 이해하기 위해 "B"를 이해해야 하는 그런.......

가. ARP Spoofing

  • ARP는 Address Resolution Protocol의 약자(주소, 해결, 프로토콜?)
  • resolve
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 여기에서 ARP 는 OSI 2 layer와 3 layer의 내용을 이해해야 한다.
  • ARP 는 같은 네트워크 영역의 다른 대상과 통신을 하기 위해 필요로 하는 정보를 파악하기 위한 프로토콜이며, "IP"는 알고 있으나, 실질적인 통신을 위한 주소 "MAC"를 얻어내기 위한 행위이다.
  • Spoofing은 직접 공격에 해당되며, (간접 공격은 Sniffing)
  • spoof의미
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 정리하자면 그렇다. ARP의 IP -> MAC을 얻고자 하는 과정에서 "MAC"주소를 조작하여
  • "A" : 공격 대상(Victim)
  • "B" : 공격자(Attacker)
  • "C" : 통신 대상
  • 의 과정에서 "A" 가 "C"와 통신을 하고자 할 때, "B"가 중간에서
    "A"와"C"의 "MAC"주소를 서로에게 조작 / 전달하여 실질적으로 "A"는 "B"와 "C"도 "B"와 통신을 하게 되는 형태를 의미한다.
  • 그렇게 함으로써 "B"는 "A"와 "C"의 통신 내용을 가로채거나 내용을 조작하여 원하는 데이터를 얻는다.

나.  Ping of Death

  • 죽음의 Ping???
  • 이 공격은 간단하다. 전형적인 과부하 발생 DoS 공격인데 Ping(ICMP를 이용, OSI 3 layer)을 발생시키는데, 해당 Ping에 데이터의 크기를 "크게"만들어 전송하여 정상적인 서비스를 제공하지 못하도록 하는 공격을 말한다.
  • Ping은 윈도우 / 유닉스 / 리눅스 같은 OS에서 기본적으로 명령어가 동일한 명령어 중 하나이다.(대부분 비슷하나 조금씩 다를 수 있다.)
  • 일반적으로 OSI 3 layer의 값을 통해 해당 Host의 Alive, Dead 상태를 파악하기 위한 용도로 많이 사용한다.(하지만 절대적인 것은 아니다.)
  • 이때 Ping은 윈도우에서는  "l"옵션, 리눅스에서는 "s"옵션을 통해 데이터의 기본 크기를 조작하여 사용할 수 있다.
  • Ping은 하나의 크기가 대략적으로 65000byte(2^16, 이 값은 앞으로도 많이 보여질 값의 크기이다.) 정도로 최대 설정이 가능한데, 이는 일반적인 1500 "MTU(한번에 전송가능한 최대 패킷 사이즈)"를 생각하면 65000일 경우 기본적으로 65,000 / 1500을 계산하면 약 43.X가 나오는데 올림 계산하여 한번의 명령으로 44개의 패킷이 발생된다. 물론 그에 대한 응답 또한 44개가 정상적으로 회신되어져 와야 한다.
  • 이 처럼 Tool을 이용하여서든, 혹은 bat명령어를 통해 ping의 정상적인 옵션을 이용하던 Ping의 크기를 늘려 과다한 패킷을 발생시킬 수 있다. 이러한 공격을 Ping of Death라고 한다.
  • 세부적으로 학습 시에는 Packet Dump등을 통해 OS를 추정한다거나, TTL을 이해한다거나 하는 요소를 세부적으로 설명할 예정.

다. SMURF

이 공격은 최근의 공격들을 보았을 때 무조건 * 100 이해해야 함이 옳다고 본다.

갑자기 왠 파란 꼬꼬마를 여기서 언급하느냐 라고 할 수 있는데, 최근 발생한 Memcached DrDoS 라던지, 각종 Amplified(증폭) 공격과 관련해서는 이 개념을 이해하면 훨씬 쉽게 접근(?) 할 수 있다고 판단된다.

여기서 Amplified

  • 증폭.png
    (이미지 출처 : 네이버 영어사전 검색 결과)

SMURF 공격 자체는 사실 같은 Broadcast 영역으로 한정된다. 하지만 이 또한 응용을 통해 전세계 공인IP로 연결된 모든 곳에는 "정상적인 통신 요청 방법"을 악용할 수 있는 형태로 응용되어져 있다.

SMURF 공격은

  • ICMP Request를 발생시킬 때, "출발지 주소= 요청자 주소"를 "Victim IP"로 조작하여 패킷을 발생시키며, 이 Request 패킷의 목적지는 "Broadcast 주소"이다.
  • 그로 인해 Class로 가정할 때, 최대 254개(0에서 255까지 "256"개의 IP 중 "0" Network Address, "255" Broadcast Address를 제외한 254개의 IP가 ICMP Request로 부터 응답할 수 있다.
  • 위의 "나" 항목에서 Ping of Death를 생각해보자.
  • 정상 명령어를 이용하여 입력한 Ping을 크기 수정을 통해 SMURF 공격을 발생시켰다면?
  • 단순 계산만 하더라도 65,000 / 1500 = 44개 라고 가정
  • 44 * 254 = 11,176개. bat등으로 혹은 단순 손으로 생성해낸다고 해도......규모가 큰 네트워크 환경일수록 서브넷을 업무별 용도별 등으로 분리해야 하는 경우는 이러한 무분별한 Broadcast 발생에 의한 네트워크 부하 증가도 고려대상이다.
  • 여튼 SMURF란 요청하지 않은 응답을 수신하며 그를 처리하다 서비스 거부에 빠지게 되는 공격을 말한다.

라. LAND Attack

  • LAND는 사전적 의미를 보면 명사와 동사로 구분된다.(영알못이라 그냥 네이버 어학사전 투척한다.)
  • 랜드.png(이미지 출처 : 네이버 영어사전 검색 결과)
  • 이 공격에서는 동사의 의미로 사용된 것으로 추정된다.
  • 자 이 공격은 간단하다. 우선 이 공격 또한 "주소"가 조작된 패킷이 유입되어 서비스 거부에 빠지게 되는 공격인데, "출발지 주소"와 "목적지 주소"를 "Victim" 주소로 하여 조작하여 패킷을 발생시키고, 이 패킷을 받은 Victim은 서비스 거부에 빠지게 되었었다.(현재는 단순 LAND IP 공격은 통하지 않는 다는 것.)
  • 하지만 늘 응용 공격을 생각할 필요가 있다. (정상적인 NTP 요청을 참고.)

마. TCP Syn Flooding

제일 설명이 길어질지도 모르는 공격 종류이다. 초기에 나는 이 공격을 단순히 Syn Flag가 활성화된 TCP 패킷이 과다로 유입되는 공격인줄로만 알았다. (물론 일부는 맞다.) 하지만 이를 완벽히 이해하기 위해서는 지겹게 들었던 3Way Handshaking을 반드시 이해해야 하고, 더불어 나아가서는 서버의 TCP 세션 정보(특히나 HTTP)의 저장 방법에 대한 내용도 이해할 필요가 있다.

  • 나중에 상세히 다시 분석하겠지만 우선 3Way Handshaking, TCP 방식의 통신을 하기 위해서 반드시 거쳐야 할 "세션 수립" 과정
  • 어떠한 TCP 데이터라도 이 과정을 거치지 않고 바로 TCP 통신에 대한 정보를 요청하거나 전달할 수는 없다.
  • 데이터를 상호 송수신 하기 위한 선행 과정이 3way Handshaking 이다.
  • 3Way와 공격의 개념은 다음과 같다.

1) 통신 요청자는 Syn Flag만 활성화된 TCP 패킷을 보낸다.

2) 서비스 제공자는 Syn에 대한 응답으로 Syn과 Ack에 대한 응답을 보낸다.

3) 통신 요청자는 Ack로 응답을 함으로써 상호간 TCP 세션 수립이 완성되며 데이터를 송수신 할 수 있다.

여기서 공격은 2번 항목에서 부터 이해를 요구하게 된다. Listen 중인 TCP Port라면 Syn+Ack으로 응답을 주게끔 되어 있다. 하지만 닫혀진 포트로 Syn 패킷이 유입되었다면, RST 패킷이 응답되어져 가 세션이 끊기게 되어있다.

  • 공격의 경우 Attacker는 Syn Flag 패킷만 과다로 보내는 데, 정상적으로 Listen 중인 Port로 요청이 유입될 때, 기존 서버는 해당 요청 정보를 바로 저장한다.(Backlog Queue라는 개념이 있다.)
  • 서버는 이 요청 정보를 Syn 만으로 저장하다보니 이후에 3Way가 이루어졌던, 이루어지지 않았던 정보를 저장하는 공간이 가득차버려 더이상 정상적인 요청을 대응할 수 없게 되는 것이다.(TCP의 구조 특성 상 패킷이 유입되었을 때 다음 패킷이 유입되기까지 대기 하는 시간이 있다.)
  • 이러한 점을 노려 Syn 만 과다로 발생 시키고, 최종적으로 Ack를 발생시키거나, 세션의 단절을 알리거나 하지 않는 행위로 Victim이 서비스를 정상적으로 제공할 수 없는 상태로 빠뜨리는 것이다.

바. Tear Drop

우선 "Tear"와 "Drop"의 사전적 의미를 보자.

  • 티어드랍.png
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 드랍.png
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 찢어버린다니...;
  • 구멍을 뚫고 떨어지다. 라는 의미로 이해해보자. 가 아니라 이건 그냥 톱니 바퀴를 연상해보자
  • 데이터가 전송될 때 앞에서 MTU에 의해서 패킷 하나가 전송할 수 있는 단위가 한정적이다. 라는 걸 언급하였다. 그렇다면 우리가 컴퓨터에서 사용되는 GB 급의 파일들은 어떻게 전송되는 것일까?
  • 물론, 네트워크로 전송될 때는 분할되어 잘개 잘개 쪼개어져서 전송된다. 그것을 다시 합쳐서 하나로 만드는 것.
  • 이때 이 잘개 잘개 쪼개진 애들이 하나로 합쳐지기 위해서는 "순서번호" 라는 것과 "데이터의 시작과 끝" 위치가 중요한데, 톱니바퀴는 그 톱니 아귀아귀 마다 "딱 딱" 맞춰져야만 돌아간다. 넘쳐도, 모자라도 정상적으로 돌아가지 않게 된다.
  • 데이터 전송 또한 마찬가지이다. "원래의 데이터가 분할되어 전송되고, 다시 수신자가 그 데이터를 원래의 데이터로 합쳐 원본 파일로 만들어내기 위해서는" 전송 된 데이터의 앞, 뒤 연결고리가 맞아떨어져야 한다.(정확하게)
  • 조작을 통해 Offset이라는 것을 수신자가 정상적으로 재 조합 하지 못하도록 하는 공격이 Tear Drop이다.
  • 결국 한줄로 요약하자면, 분할 전송된 데이터를 재조합하지 못하도록 조작된 패킷을 전송.

이렇게..DoS 의 기본적인 6가지 개념을 간단하게(?) 설명해 보았다.

여기 이 아주 오래된 개념 조차도 단어의 연결고리는 무한대에 가깝게 이어질 것이다...T_T

앞으로 주기적으로 포스팅을 할 예정이고, 기존의 네이버 블로그는 완전히 접었다.

오글거리는 자조적인 멘트 적으려다 여기서 이만.

파이썬도 공부해야되는데...

#DoS #DDoS #DrDoS #ARP #Spoofing #Ping of Death #SMURF #LAND Attack #TCP Syn Flooding #Tear Drop #MAC #Memcached #Amplified #Broadcast #backlog Queue #3way Handshaking #Listen Port

+ Recent posts