2장 부연설명 "설명 드리기에 앞서 2장 동기식 입출력과 비동기식 입출력의 차이점에 대한 질문이 많이 들어와서 먼저 이것에 대한 간단한 부연 설명을 드리고 나서 3장을 계속 진행하겠습니다." -교수님- 사용자 프로세스가 OS에게 IO요청을 한 경우, IO가 수행되는 동안 이 프로세스가 입출력이 끝날때가지 아무일 안하고 기다린다면 동기식 입출력. 사용자 프로세스가 입출력 요청을 했을 때, 입출력이 진행되는 동안 그 프로세스가 무언가를 instruction을 하면 비동기식 입출력 동기식이냐 비동기식이냐를 구분할 때 프로세스가 CPU를 가지고 있느냐 없느냐는 중요하지 않음. IO작업 동안 다른 무언가를 실행하지 않고, 결과를 받을때 까지 기다린다면 동기식. IO작업 요청을 한 다음 자신의 일을 계속 수행하는 ..
1. 프로세스의 개념 2. 프로세스의 상태 (Process State) 3. 프로세스 상태도 4. Process Control Block (PCB) 5. 문맥 교환 (Context Switch) ⭐ 6. 큐 (Queue) 7. 스케줄러(Scheduler) 1. 프로세스의 개념 프로세스는 실행중인 프로그램 프로세스의 문맥이란 프로세스가 태어나서 실행이 되다가 종료가 될텐데, 이 프로그램 중간 어느 시점을 잘라놓고 봤을 때 이 프로그램이 무엇을 어떻게 실행 했는 지, 현재 시점에 어떤 상태에 있는 지, 어디까지 작업을 수행했는지를 정확하게 나타내기 위해서 사용되는 개념 프로세스가 CPU를 점유하게 되면 CPU안의 Program Counter라는 레지스터가 이 프로세스의 code 어느 부분을 가리키게 되고, ..
DVWA Security Level 을 Medium으로 설정하고 SQL Injection 페이지로 간다. 이번에는 ID를 폼에다가 입력하는 것이 아니라 정해진 값을 선택하도록 되어 있다. 이 경우 비록 GUI에서 값을 선택하도록 만들어놨지만 Intercept 기능을 이용해서 값을 바꾸는 것을 시도해 볼 수 있다. Burp Suite의 Proxy -> Intercept로 가서 Intercept를 켠다. User ID를 1로 선택하고 submit을 눌러 본다. Burp Suite에서 위와 같은 화면이 나오는데 여기서 id=1 부분을 id=1' or '1'='1 로 수정하여 Forward를 한다. Forward를 했더니 그림과 같이 구문 에러가 난다. id값이 1, 2, 3, 4, 5 로 숫자로 되어 있었는데..
지금까지 우리는 SQL 인젝션 공격을 손수 시도하여 각종 정보를 알아내는 실습을 하였다. 이번 시간에는 SQL 인젝션 공격 프로그램 중 가장 대중적이라고 할 수 있는 SQLMAP 이라는 프로그램을 이용하여 자동으로 공격하는 방법을 배워 보자. Applications 메뉴로 가서 Web Application Analysis -> sqlmap 클릭 sqlmap은 파이썬으로 개발된 프로그램으로 터미널에서 명령을 실행 할 수 있다. sqlmap 화면을 보면 sqlmap과 관련된 각종 옵션들을 참고 할 수 있다. 이 중 필수 옵션은 -u 이다. -u 뒤에다가 공격할 URL주소를 입력하면 sqlmap 프로그램이 그 url을 대상으로 자동으로 공격을 수행한다. DVWA처럼 로그인 된 상태에서 공격을 수행할 때는 쿠키..
이번에는 블라인드 SQL 인젝션에 대해서 알아보자. DVWA의 블라인드 SQL 인젝션 페이지에 들어가서 1이라는 id를 입력해보자. 사용자 1에 대한 정보가 나오는 대신에 이 페이지에는 ID 1인 사용자가 존재한다는 것만 알려준다. 이번에는 지난번에 SQL 인젝션 공격을 할 때 했던 것 처럼 한 번 작은 따옴표를 입력해본다. 특별한 에러가 발생하는 대신 사용자가 존재하지 않는다는 메시지를 보여준다. 에러가 발생하지 않기 때문에 이 폼 뒤에 SQL 쿼리문이 사용되고 있는지, 또 우리가 조작할 수 있는지 쉽게 알기 어렵다. 만약 조작한다고 하더라도 데이터의 내용을 출력하지 않기 때문에 쉽게 정보를 빼내기도 어렵다. 이번에는 1'AND 1=1# 을 입력해본다. ID가 존재한다고 나온다. 1' AND 1=2# ..
1. 동기식 입출력과 비동기식 입출력 ⇒ IO에서의 synchronous라고 하는 것은 IO까지 가서 결과를 보고 오는 것을 보통 동기식 입출력이라고 함. ⇒ 동기식 입출력은 I/O 요청 후 I/O장치로부터 작업이 끝난 다음에야 사용자 프로그램이 다음 일을 함. 비동기식 입출력은 I/O장치에 무언가를 요청한 다음 (결과를 기다리지 않고) 바로 다시 CPU제어권을 얻어서 일을 수행. ⇒ IO장치에 여럿이 동시에 접근할 수 있는데 예를들어, A는 이 IO장치에 갖다 쓰고(synchronous write), B는 읽어오고(synchronous read). 이 때, A, B 모두 읽고 쓰는 것 확인까지 한 상태 ⇒ IO 장치에 가지 않고(확인하지 않고) 다음 일을 수행하는 것은 asynchronous(비동기식 ..
1. 컴퓨터 시스템 구조 ⇒ Memory는 CPU의 작업 공간. CPU는 매 순간(매 클럭) 메모리에서 기계어를 하나씩 읽어서 실행. ⇒ I/O device로 부터 Computer로 데이터를 가져가는 것을 input, 처리된 결과가 I/O Device로 나타나는 것을 output이라고 함. ⇒ Disk는 input 장치이기도 하고 output 장치이기도 함. 파일을 메모리에 input, 파일을 disk에 output. ⇒ 각각의 IO device들은 각 device를 전담하기 위한 작은 cpu같은 것들이 있음. 이것을 device controller라고 부름. ⇒ disk에서 head가 어떻게 움직이고 어떤 데이터를 읽을지와 같이 disk 내부를 통제하는 것은 cpu가 아닌 disk에 붙어있는 disk ..
데이터베이스 정보를 알아내보자. 깃허브에 올려져 있는 SQL 구문을 보면 데이터베이스 명 조회에 관련된 구문이 있다. 이 구문을 사용한다. information_schema라는 데이터베이스의 schemata라는 테이블에서 정보를 가져오는데 mysql에서는 information_schema라는 데이터베이스에서 데이터베이스 정보나 테이블, 칼럼 정보를 관리하고 있다. schema_name을 가져오면 데이터베이스 명을 조회할 수 있다. user ID에 위의 구문을 넣고 실행한다. 모든 데이터베이스의 이름들이 출력되었다. dvwa, information_schema, mysql 등의 데이터베이스 명이 있음을 알 수 있다. dvwa 데이터베이스가 우리가 관심을 가질만한 DB이다. select로 schema_nam..
이번에는 UNION 키워드를 이용한 공격을 실습 해보자. UNION을 이용하면 데이터베이스의 모든 정보를 알아낼 수 있다. UNION은 합집합 이라고 했었는데 UNION을 사용하기 위해서는 원래 쿼리문이 조회하는 select문에 칼럼 개수와 union 뒤의 select문에서 요청하는 칼럼 개수가 같아야 한다. 그렇지 않으면 에러가 발생하기 때문에 먼저 원래의 쿼리문이 몇 개의 칼럼을 리턴하는지 알아내야 한다. DVWA의 SQL Injection 페이지에 가서 UserID에 1'union select 1# 을 입력해보자. 이 select 뒤에 1이라는 상수 값을 주게 되면 그것을 그대로 출력 할 수 있다. 꼭 1 뿐만 아니라 2, 3 혹은 null 이라는 값을 줄 수 있다. submit을 누른다. 실행을 ..
DVWA Security Level을 Low로 설정한 후 SQL Injection 페이지로 간다. user ID를 입력하는 폼이 있다. 여기에 1이라는 값을 넣으면 ID가 1인 사용자에 대한 정보가 출력된다. 위와 같은 페이지가 있을 때 SQL Injection 공격에 취약한지 알아보는 가장 기본적인 방법은 작은 따옴표를 입력해 보는 것이다. 작은 따옴표를 입력해보자. 취약한 페이지의 경우 위 페이지 처럼 sql 관련 에러가 발생한다. 그 이유는 소스 코드를 보면 알 수 있다. user_id 부분을 보면 사용자가 입력한 값은 $id라는 변수로 들어가게 되는데 이 $id라는 변수는 이미 작은 따옴표로 둘러싸여 있다. 만약 여기에 작은 따옴표가 하나 더 들어오게 되면 작은 따옴표가 총 세 개가 되면서 에러가..
1. 운영체제란? 소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 함 ⇒ 운영체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라감 ⇒ 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것. ⇒ 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 됨. ⇒ 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 부르며 이를 좁은 의미의 운영체제라고도 부름. ⇒ 즉, 커널은 OS 코드 중에서도 핵심적인 부분 ⇒ 넓은 의미의 OS는 커널뿐 아니라 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념 ex) 윈도우에서 파일을 복사..
JVM이란? JVM은 'Java virtual machine'을 줄인 것으로 직역하면 '자바를 실행하기 위한 가상 기계' 가상 기계라는 말이 좀 어색하겠지만 영어권에서는 컴퓨터를 머신(machine)이라고도 부르기 때문에 '머신'이라는 용어대신 '컴퓨터'를 사용해서 '자바를 실행하기 위한 가상 컴퓨터'라고 이해하면 좋습니다. '가상 기계(virtual machine)'는 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어. 예를들어 TV와 비디오를 소프트웨어화한 윈도우 미디오 플레이어, 곰플레이어 등이 있습니다. 이와 같이 '가상 컴퓨터(virtual computer)'는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 됩니다. 자바로 작성된 애플리..