본문 바로가기

분류 전체보기 32

네트워크 보안 기초 사이버공격 ※ 사이버공격 패러다임 변화 * 목적: 자기과시 → 금품갈취(사이버범죄) → 사회혼란, 사이버테러 금전적, 정치적 목적. 국가 차원의 위협 * 기법: 수동 → 은닉, 자동화 → 조직적, 고도화, 지능화 악성코드, 좀비PC, 사회공학적 기법 증가 * 대상: 개별시스템 → 대규모(시스템 및 네트워크) → 사회기반시설, 국가 대상 공격 조직화된 전문적인 해커집단에 의해 발생 ※ 사이버 침해사고 유형 변화 : 바이러스, 웜 → DDoS → APT 공격, 개인정보 유출 ※ 최신 사이버공격 유형 - 랜섬웨어 공격 - 특정인 겨냥한 스피어 피싱 - DDoS 공격(여러 프로토콜을 결합한 공격) - SW 공급망, IoT 기기, 산업제어시스템(ICS, OT) 대상 공격 ※ 보안기술 발전 : 시스템 보안 → 네트.. 2020. 12. 13.
소켓 프로그래밍 - Connected UDP Unconnected UDP 소켓의 sendto() 호출과정 ① UDP소켓에 목적지의 IP와 포트번호 등록 ② 데이터 전송 ③ UDP 소켓에 등록된 목적지 정보 삭제 Connected UDP 소켓 - connect() 호출로 소켓에 IP와 포트번호 할당 → 커널과 소켓간 연결 상태 유지(read() / write() 사용 가능) - 매회 목적지 주소정보 등록 및 삭제 과정 불필요 - UDP 소켓으로 하나의 호스트와 오랜 시간 데이터를 송수신 해야할 때 효율적 Connected UDP Socket //Connected UDP Socket #include #include #include #include #include #include #define BUF_SIZE 30 void error_handling(c.. 2020. 12. 13.
소켓프로그래밍 - UDP 소켓 UDP 소켓 특성 - 흐름제어 flow Control이 없음(SEQ, ACK과 같은 메시지 전달 X) - 연결 설정과 해제 과정 존재 X → connect(), listen(), accept() 필요 X - 데이터의 분실 및 손실 위험 존재. 빠른 데이터 전송 UDP의 데이터 송수신 - UDP는 연결의 개념 존재 X → 서버 소켓과 클라이언트 소켓의 구분 X → connect(), listen(), accept() 불필요 - 하나의 소켓으로 둘 이상의 영역과 데이터 송수신 가능(sendto(), recvfrom()) UDP 기반 소켓 API(시스템 콜 호출) 흐름 ※ 서버 소켓: socket() → bind() → recvfrom() → sendto() → close() ※ 클라이언트 소켓: socket.. 2020. 12. 13.
소켓 프로그래밍 - TCP 소켓(입출력 버퍼, Half-close) 데이터 입출력(read() / write() 호출) - write()가 호출되는 순간, 데이터는 출력버퍼로 이동 - read()가 호출되는 순간, 입력버퍼에 저장된 데이터를 읽음 입출력 버퍼 - TCP 소켓 각각에 대해 별도로 존재 - 소켓 생성 시 자동으로 생성 - 소켓을 닫아도 출력버퍼에 남아있는 데이터는 계속해서 전송이 이뤄짐 → 데이터 송신 보장 - 소켓을 닫으면 입력버퍼에 남아있는 데이터는 소멸됨 → 데이터 수신 보장X - 슬라이딩 윈도우 프로토콜 적용이 가능해짐 TCP 내부동작 ① 소켓과의 연결(3-WAY) : SYN → SYN+ACK → ACK ② 데이터 송수신 : ACK 번호 = SEQ 번호 + 전송된 바이트 크기 +1 ③ 연결종료(4-WAY) : FIN → ACK. FIN→ ACK clo.. 2020. 12. 13.
소켓 프로그래밍 - 어플리케이션 프로토콜 어플리케이션 프로토콜 목적에 맞는 프로그램을 구현하기 위하여 서버와 클라이언트 간 송수신 데이터 사이즈와 송수신 데이터의 끝을 정의 계산기 프로그램 구현(어플리케이션 프로토콜) - 클라이언트는 서버에 접속하자마자 피연산자의 개수정보를 1바이트 정수형태로 전달 - 클라이언트가 서버에 전달하는 정수 하나는 4바이트 - 정수를 전달한 다음에는 연산의 종류(+, -, *)를 전달. 연산정보는 1바이트 - 서버는 연산결과를 4바이트 정수의 형태로 클라이언트에게 전달 - 연산결과를 얻은 클라이언트는 서버와의 연결 종료(EOF) 계산기 프로그램 데이터 구조 계산기 프로그램 Server //TCP 산술연산 처리 서버 #include #include #include #include #include #include #de.. 2020. 12. 13.
소켓 프로그래밍 - TCP 기반(서버, 클라이언트) TCP 서버의 함수 호출 순서 : socket() → bind() → listen() → accept() → read()/write() → close() TCP 클라이언트의 함수 호출 순서 : socket() → connect() → read()/write() → close() * 각 함수 별 상세 설명 2020/12/11 - [열심히 살기/Network] - 소켓 프로그래밍(Socket Programming) Echo Server //TCP echo server #include //표준 입출력 #include //표준 라이브러리 #include //문자열 처리 함수 #include //유닉스 표준 #include //인터넷 프로토콜 #include //소켓 통신 함수 #define BUF_SIZE 10.. 2020. 12. 12.
소켓 프로그래밍 - 바이트 순서(호스트, 네트워크) Little Endian과 Big Endian ※ Little Endian * 하위 바이트 값부터 메모리에 적재 * 0x1234 5678 → 0x7856 3412 ※ Big Endian * 상위 바이트 값부터 메모리에 적재 * 0x1234 5678 → 0x1234 5678 호스트 바이트 순서 : CPU별 데이터 저장방식 Little Endian Big Endian intel x86 IBM AMD RISC 기반 CPU(ARM, Motorola) 네트워크 바이트 순서 : 통일된 데이터 송수신 기준. Big Endian 방식만 사용 바이트 변환 함수 unsigned short htons(unsigned short); unsigned short ntohs(unsigned short); unsigned long .. 2020. 12. 12.
소켓 프로그래밍 - 연결지향형 소켓(TCP 소켓) 서버 프로그램(데이터 전송) // tcp_server #include #include #include #include #include #include #include void error_handling(char *message); { int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; socklen_t clnt_addr_size; char message[]="This is tcp server socket test!"; if(argc!=2) { printf("Usage: %s \n", argv[0]); exit(1); } serv_sock=socket(PF_INET, SOCK_STREAM, 0);/.. 2020. 12. 12.
소켓 프로그래밍 - 파일 디스크립터 파일 디스크립터 - 시스템으로부터 할당받은 파일 또는 소켓에 부여된 정수 - 저수준 파일 입출력 함수(open, close)에게 소켓의 파일 디스크립터 인자를 전달하면, 소켓을 대상으로 입출력 진행 파일 디스크립터 대상 0 표준입력: Standard Input 1 표준출력: Standard Output 2 표준에러: Standard Error 파일입출력 함수 * 파일 열기: open() #include #include #include // 성공 시 파일 디스크립터, 실패 시 -1 반환 int open(const char *path, int flag); // *path: 파일의 이름 및 경로정보 // flag: 파일의 오픈모드 오픈모드(flag 값) 의미 O_CREAT 필요하면 파일 생성 O_TRUNC 기.. 2020. 12. 12.