반응형

분류 전체보기 209

Stack Buffer OverFlow 공격

스택 버퍼 오버플로우 공격에 대해서 알려면 먼저 스택(Stack)의 구조에 대해서 숙지해야 한다. 일단 스택은 LIFO(Last in First Out)의 자료구조인데, 말 그대로 마지막에 들어간 데이터가 가장 먼저 나오는 구조이다. 그림으로 표현하면 다음과 같다. 위의 스택 구조는 Intel계열의 스택 구조로 스택의 아래가 뚫려있는 모양이다. 반대로 스택의 위가 뚫려있는 모양도 있는데 이는 모토로라 계열의 스택 구조이다. 스택의 구조는 총 4개로 나뉘며 일단 위에서 말한 Intel계열과 모토로라 계열의 스택으로 나뉜다. 그리고 스택의 가장 끝 데이터(Top)을 가리키고 있는 방식에 따라 두 가지로 나뉘는데, 첫 번째 방법의 경우 실제 데이터가 담겨있는 메모리를 가리키고 있는 방법이다. 이 방법은 데이터..

정보보안 2020.11.14

파이썬 24. 클래스-1

이번 글에서부터는 클래스라는 것에 대해서 알아보도록 합시다. 클래스 일단 클래스가 과연 무엇인지 알아보도록 합시다. 클래스는 많은 사람들이 흔히 '설계도'라고 표현하곤 하는데, 실제 코드를 통해서 클래스가 무엇인지 차근차근 알아봅시다. class TV(): class 클래스명(): 일단 클래스를 만드는 방법은 아주 간단한데, 위와 같이 class라는 예약어 뒤에 클래스명을 적어주시기만 하면 됩니다. 이러면 우리는 일단 TV라는 클래스를 하나 만든것입니다. 그럼 이제 곰곰히 생각해봅시다. 우리가 사용하는 TV에는 과연 무엇이 필요할까요? class TV(): power = False 일단은 이 TV가 켜져있는지 꺼져있는지 판단하기 위한 값이 필요할 것입니다. 또한 TV를 처음 만들면 당연히 전원은 꺼져있기..

파이썬 23. 파일 입출력

이번 글에서는 파이썬에서 파일을 읽고 파일에 쓰는 법에 대해서 알아보도록 하겠습니다. 파일 생성 먼저, 데이터를 파일에 저장하는 법부터 알아봅시다. 그러려면 먼저 파일에 입력할 데이터와, 데이터를 입력할 파일이 필요할 것입니다. 파이썬에서 파일을 생성하는 방법은 다음과 같습니다. f = open('newFile.txt', 'w') 파일 객체명 = open('파일경로', '모드') 먼저, 파일 객체명을 정해주시고 open이라는 함수를 사용합니다. open함수의 인수로는 파일명과 모드가 기본적으로 필요한데, 파일명은 실행할 파일의 경로를 적어줍니다. 이때 경로를 적지 않고 파일명만 입력하면, 기본적으로 프로젝트의 root폴더를 경로로 지정합니다. 모드의 경우 파일을 어떤 방식으로 실행할지 지정하는 부분인데,..

하드 링크와 심볼릭 링크

하드 링크 링크를 생성하면 링크 파일은 원본 파일과 동일한 i-node를 가지게 된다. 링크된 파일을 수정하면 원본 파일도 수정된다. 두 파일 중 하나를 삭제하면 파일의 내용은 그대로 유지되고 사용할 수 있으며, 링크 숫자만 줄어들게된다. 하드 링크는 두 파일이 각각 동일한 수준의 데이터를 가지고 있으며, 로그데이터를 동기화한다. 하드 링크 제약 : 링크하고자 하는 파일이 다른 파티션에 존재하면 안된다. 심볼릭 링크 하드 링크와 달리 링크 파일이 원본 파일의 이름을 가리키고있다. 데이터는 애초에 원본 파일에만 들어있으며, 심볼릭 링크는 원본 파일 데이터를 가리키는 링크 정보만을 가진다. 때문에 원본 파일이 삭제되면 심볼릭 링크 파일은 제 역할을 하지 못하게된다. 원본 파일을 수정하면 심볼릭 링크의 내용도..

Computer Science 2020.11.07

레이스 컨디션(Race Condition) 공격

기본 개념 레이스 컨디션 - 한정된 자원을 동시에 이용하려는 여러 프로세스가 자원의 이용을 위해 경쟁을 벌이는 현상을 말한다. 이 레이스 컨디션을 이용해 root권한을 얻어내는 공격을 레이스 컨디션 공격이라고 한다. 공격 방법 사용자가 프로그램을 실행했을 때 SetUID를 통한 권한 상승으로 관리자 권한의 임시 파일이 생성된다. 공격자는 이 임시 파일의 이름을 파악해놓고, 임시 파일이 생성되면 이 파일의 심볼링 링크를 생성한다. 다음 프로그램 실행 시 기존의 임시 파일이 삭제되고 재생성되면 공격자는 심볼릭 링크를 이용해 파일의 내용을 변경한다. 그러면 시스템은 변경된 파일을 자신이 생성한 임시 파일이라 인식해 프로세스를 진행시키고, 공격자는 관리자 권한으로 실행되는 프로그램에서 자신이 원하는 동작을 실행..

정보보안 2020.11.07

파이썬 22. 함수-2

이번 글에서는 함수에 대해 이어서 알아보도록 하겠습니다. 일단 함수의 기본적인 선언 방법부터 코드로 다시 한번 복습해보고 진행하겠습니다. def addF(a, b): return a + b sum = addF(10, 20) print(sum) 위와 같이 코드를 작성해주시면 addF라는 함수명으로 함수를 작성하여, 매개변수 a, b를 사용합니다. 이 함수는 프로그램 내의 다른 함수에서 호출할 수 있고, addF함수 내에서도 호출할 수도 있습니다. 반면, 위의 함수와는 다르게 입력값, 반환값이 없는 함수도 존재합니다. def printHello(): print("Hello World!") printHello() 이렇게 매개변수, 반환값이 없는 함수를 작성할 수도 있습니다. 이렇게 간단하게 복습을 끝냈으니 이..

파이썬 21. 함수-1

이번 글에서는 함수에 대해서 알아보도록 하겠습니다. 함수란? 먼저, 함수란 무엇일까요? 함수란 영어로 funtion이라고 하며, 어떤 특정한 작업을 수행하기 위해 만들어진 코드들의 집합입니다. 우리가 지금까지 계속 사용해왔던 print, add, del 등등도 함수입니다. 또한 함수라는 이름 외에도 '메서드'라는 이름으로도 불리니 기억해두시길 바랍니다. 그럼 함수는 왜 사용하는걸까요? 이는 말할 필요도 없이 프로그램을 좀 더 쉽고 편하게 설계하기 위해서입니다. 프로그래밍을 하다 보면 어떠한 일정한 작업을 여러 번 해야 하는 경우가 많으실 겁니다. 이는 적게는 10줄 내외가 될 수도 있고, 그 이상의 복잡한 내용의 코드가 될 수도 있습니다. 그런데 이 코드를 커다란 프로그램 안에서 여러 번 재사용해야 한다..

파이썬 20. 반복문-while문

저번 글에서는 파이썬에서 쓰는 반복문 중 하나인 for문에 대해 알아봤었는데, 이번 글에서는 다른 하나인 while문에 대해서 알아보도록 합시다. while문 일단, while문의 기본적인 구조는 다음과 같습니다. while 조건식: 실행 코드1 실행 코드2 . . . 위와 같은 구조에서 조건식이 True일 경우 실행 코드를 계속해서 반복수행 하는 것이 while문 입니다. 실행 순서는 먼저 조건식을 검사한 후, 실행코드를 실행합니다. 그 후 반복할 때마다 계속해서 조건식을 검사하여 반복을 더 수행할지 종료할지 검사합니다. 그래서 for문같은 경우 일정한 횟수만큼 반복할 때 주로 사용하고, while문의 경우 특정한 조건이 만족될 때 작업을 계속해서 수행해야할때 주로 사용합니다. 그럼 간단한 코드로 wh..

파이썬 19. 반복문-for문

이번 글에서부터는 반복문에 대해서 알아보도록 하겠습니다. 반복문 반복문이란 말 그대로 특정한 코드를 반복해서 수행하는 것을 의미합니다. 예를 들어 num이라는 변수에 1을 50번 더하는 작업을 수행해야 한다고 생각해봅시다. 이럴 때는 코드를 어떻게 작성하면 될까요? num = 0 num += 1 num += 1 num += 1 num += 1 num += 1 . . . 먼저, 위와 같이 num에 1을 더하는 코드를 50번 작성하면 일단 해결이 가능할 것입니다. 하지만 이러한 작업은 매우 비효율적이고 공간도 많이 차지합니다. 또한 만약에 1을 50번 더하는 것이 아니라 만번, 천만번 더해야 한다면 이렇게는 할 수 없을 것입니다. 따라서 이러한 작업을 더 편하게 수행할 수 있도록 반복문을 사용합니다. 파이썬..

반응형