이 시리즈의 첫 포스트는, 파이썬이나 프로그래밍을 처음 접하시는 분들을 위해 작성하였습니다. 파이썬은 굉장히 효과적인 스크립트 언어로, 정보보안 분야에서 널리 사용됩니다. 대부분의 보안관련 도구들이 파이썬으로 작성되었거나, 파이썬 스크립트 형태의 모듈로 구성되어 있습니다. 이러한 모듈은 단지 몇줄의 코드를 Import하는 것만으로, 굉장히 복잡한 일련의 과정들을 수행할 수 있도록 도와주는 마법같은 해결사입니다.


이 시리즈는 Linux 운영체제에서 파이썬2 버전을 사용하는 것을 전제로 진행됩니다. 리눅스나 맥 운영체제에서는 파이썬2가 기본적으로 내장되어있기 때문에 별도 설치과정은 생략하도록 하겠습니다. 파이썬 코드를 작성할 때에는 파이썬 인터프리터(interpreter)에 직접 입력하는 방법도 있고, 파일에 저장하는 방법도 있습니다. 아직 파일에 저장하여 수행하는 방법을 사용하기 이전에, 먼저 인터프리터를 사용해서 직접 코드를 입력해봄으로써 논리적인 흐름과 문법을 터득하는 것이 훨씬 이해가 빠르실 것입니다.


참고적으로 파이썬은 코드의 Indentation(들여쓰기)가 필수적인 언어입니다. 여러분이 함수를 선언하거나, 루프, if/else 구문 등을 작성할 때에는 반드시 Indentation 규칙을 지켜주셔야 합니다.


그럼 파이썬 인터프리터를 실행해보도록 하겠습니다. 터미널에서 'python'이라고 입력해보세요.

결과는 아래와 같습니다.

이번 실습에서는 파이썬 인터프리터에 직접 코드를 입력하는 방식으로 진행하겠습니다. 먼저 두개의 변수를 정의하고, type()함수를 사용하여 방금 선언한 변수들이 String 타입인지 혹은 Integer 타입인지 확인해보도록 하겠습니다.

특정 함수에 대한 구체적인 내용이 궁금하실 때에는, help()함수를 사용하시는 것이 도움이 될 것입니다. 이 함수를 잘 기억해두신다면 앞으로 배울 다양한 파이썬 언어의 내용들을 잘 이해하실 수 있을 것입니다.

help(type)의 결과화면. 종료시 q를 입력한다.
help(type)의 결과화면. 종료시 q를 입력한다.

이번에 수행할 코드는, 두 변수를 잇는(concatenate) 것입니다. 그리하여 스크립트의 출력결과물로 한번에 출력하도록 하겠습니다. 이 때 Integer 타입으로 선언한 변수를 concatenate하기 위해서는, str()함수를 사용함으로써 String 타입으로 형변환을 시켜주어야 합니다. IP 변수는 이미 String 타입으로 선언되어 있으므로 별도로 캐스팅할 필요는 없습니다.

이제 여러분은 Stirng과 Integer라는 두가지 기본적인 데이터 타입을 습득하셨습니다. 이러한 데이터 타입들을 처리할 수 있는 다른 built-in function도 다양하니 직접 연구해보시기 바랍니다.


파이썬의 스트링(String)은 문자열의 특정 오프셋에 접근하여 처리할 수 있는 다양한 기능을 가지고 있습니다. 예를들어 len()함수를 사용하면 문자열의 길이를 확인할 수 있습니다. 여러가지 다양한 문자열 처리작업을 하기위해서 필요한 가장 기초적인 함수입니다. 

dir() 함수를 사용하면, 해당 객체를 통해 사용가능한 모든 변수와 함수들을 리스트 형태로 보여줍니다. 즉 해당 값을 통해 할수있는 일들을 구경할 수 있는 것입니다.

이제 여러분은 출력된 built-in string함수들을 확인하고 필요한 것을 적절히 선택하여 활용하실 수 있을 것입니다. 또 사용하시다가, 해당 함수의 기능을 정확히 알 수 없다면 다시 help()함수를 사용하시면 됩니다.

help(ip.split)의 결과. 종료시 q 입력.
help(ip.split)의 결과. 종료시 q 입력.

다음으로 string.split(':') 함수를 살펴봅시다.

해당함수는 ':'문자를 기준으로 하여(deliminator) 해당 스트링을 잘라낸 리스트를 반환해줍니다.  이것은 실제로 굉장히 유용한 기능입니다. 이를 통해 장황한 문자열중에서 정확히 필요한 부분만을 추출해낼 수 있습니다. 예를들면, 해당 리스트로부터 IP주소정보만  가져오고 싶다고 가정해봅시다. 이때에는 해당 리스트의 인덱스(index)를 사용해여 필요한 원소에 접근하여 꺼내오면 됩니다. 해당 아이템을 추가하거나(append함수), 삭제(remove함수)할 수도 있습니다.


파이썬 모듈(Python Module) :

위에서 언급했듯이, 파이썬 모듈은 단지 몇줄의 코드를 Import하는 것만으로, 굉장히 복잡한 일련의 과정들을 수행할 수 있도록 도와줍니다. 파이썬에는 os, subprocess, socket, urllib, httplib, re, sys 등등.. 다양한 모듈들이 기본적으로 내장되어 있습니다. 뿐만 아니라 cymruwhois, scapy, dpkt, spider 등의 3rd party 모듈 또한 굉장히 많습니다. 이러한 모듈들을 사용할 때 단지 "import"라는 키워드만 사용하시면 모든 기능들을 끌어다 쓸 수 있습니다. 예를들어 os 모듈은 파이썬 코드를 사용하여 운영체제에서 사용되는 다양한 명령어들을 호출할 수 있도록 합니다.

OS 모듈을 통해 불러올 수 있는 다양한 함수들이 있습니다. 제가 자주 사용하는 것은 "os.system"입니다. 이것을 사용하면 OS를 통해 커맨드를 실행한 후, 그 결과값을 파이썬으로 가져올 수 있습니다. 다음의 명령어를 수행한다면, 리눅스의 base64 디코딩 명령어를 수행한 결과값을 파이썬이 가져와서 출력해줍니다. 


파일 생성하기 :

파일로부터 데이터를 읽어오거나, 내용을 파일에 기록하는 간단한 방법들을 살펴보겠습니다. 아래의 코드는 파일을 생성하고 해당 파일에 read/write를 수행합니다. 이를 잘 활용하신다면 파일로부터 input을 불러온 후, 어떤 로직을 사용하여 처리하고, 그 결과값을 다시 새로운 파일에 저장하는 작업을 할 수 있습니다.


파이썬 인터프리터에서 다양한 코드들을 숙지하여 확실히 여러분의 것으로 만드시기 바랍니다. 앞으로 진행될 조금 더 고차원의 예제에서는 이러한 다양한 함수들이 모두 활용됩니다. 


저  같은경우 파이썬 코드를 개발할 때에 두개의 터미널 창을 각각 띄워놓고 작업을 합니다. 한 창에서는 메인 개발작업이 이루어지고, 다른 창에서는 메인 창에 입력하기전에 해당 모듈의 로직을 미리 단위 테스트하는 용도로 씁니다. 


이제 다음 튜토리얼에서는 실제 파이썬 코드에서 변수와 함수를 정의하는 방법, 클래스(객체지향 프로그래밍 방법론), 그리고 sys 등의 모듈들에 대해 진행하겠습니다.


Reference : 

CybraryPrimal Security - Python for InfoSec Professionals Part 1: Getting Started


CPUU님의 창작활동을 응원하고 싶으세요?