CS

    (해킹 용어) 스푸핑, 스누핑, 스니핑의 차이

    스푸핑 - SpoofingSpoof은 '속이다, 사기치다'의 뜻으로, 인터넷 내에서 여러가지 의미로 사용되며, 외부의 악의적 네트워크 침입자가 웹사이트를 구성해 사용자들의 방문을 유도, 인터넷 프로토콜인 TCP/IP의 구조적 결함을 이용해 사용자의 시스템 권한을 획득한 뒤 정보를 빼가는 해킹 수법을 말한다.유명 업체의 명의로 스팸 메일을 발송하거나 위조 사이트로 접속을 유도하는 등의 기술이 있고, IP 스푸핑은 로그인 하려는 컴퓨터가 허가받은 IP를 도용해 로그인 하는 기법을 일컫는다.스누핑 - SnoopingSnoop은 '기웃거리다, 염탐하다'의 뜻으로 네트워크 상에 떠도는 중요 정보를 몰래 획득하는 행위다.스니핑 - SniffingSniff은 킁킁거리다의 뜻으로 네트워크 상에서 자신이 아닌 다른 상대..

    블루투스의 취약점과 위협

    블루프린팅 (Blueprinting)- 블루투스 공격 장치의 검색 활동을 의미- 블루투스는 장치 간 종류를 식별하기 위해 서비스 발견 프로토콜 (SDP : Service Discovery Protocol)을 보내고 받음.- 공격자는 이를 이용해 공격이 가능한 블루투스 장치를 검색하고 모델을 확인할 수 있음. 블루스나프- 블루투스의 취약점을 이용하여 장비의 임의 파일에 접근하는 공격- 공격자는 블루투스 장치끼리 인증 없이 정보를 간편하게 교환할 수 있는 OPP (OBEX Push Profile)를 사용하여 정보를 열람- 주로 스마트폰에 저장된 개인정보, 연락처, 개인 일정표, 문자 메시지에 접근 블루버그- 블루투스 장비 간 취약한 연결 관리를 악용한 공격- 블루투스 기기는 한 번 연결되면 이후에는 다시..

    NAC (Network Access Control) 이란?

    NAC(Network Access Control) 시스템은 과거 IP 관리 시스템에서 발전한 솔루션이다.기본적인 개념은 IP 관리 시스템과 거의 같고, IP 관리 시스템에 네트워크에 대한 통제를 강화한 것이다.NAC의 접근 제어/인증 기능은 일반적으로 MAC 주소를 기반으로 수행된다.1. 먼저 네트워크에 접속하려는 사용자는 네트워크 접속에 사용할 시스템의 MAC 주소를 IP 관리 시스템의관리자에게 알려줘야 한다.2. 관리자가 해당 MAC 주소를 NAC에 등록하면 사용자는 비로소 해당 네트워크를 사용할 수 있는 권한을 가진다.3. NAC는 등록된 MAC 주소만 네트워크에 접속할 수 있게 허용해주므로 라우터로 구분된 서브 네트워크마다 에이전트 시스템이 설치되어 있어야 한다. NAC를 통한 사용자 인증은 ..

    서비스 공격 유형

    DOS (Denial Of Service) 서비스 거부 공격대량의 데이터를 한 곳의 서버에 집중적으로 전송함으로써 서버의 정상 기능 방해. Ping of Death (죽음의 핑) Ping 명령 전송 시, 패킷 크기를 인터넷 프로토콜 허용 범위 이상으로 전송하여, 공격 대상의 네트워크를 마비시킴.패킷을 정상 크기보다 아주 크게 만들어 전송하면 다수의 IP 단편화 발생하고, 수신 측에서는 단편화된 패킷을 처리하는 과정에서 많은 부하가 발생하거나, 재조합 버퍼의 오버플로우가 발생하여 정상적인 서비스를 하지 못함. Smurfing (스머핑) IP나 ICMP 특성을 악용하여 엄청난 양의 데이터를 한 사이트에 집중적으로 보냄으로써, 네트워크를 불능 상태로 만듦출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체..

    외판원 순회 (TSP) 알고리즘 개념

    외판원 순회 문제 (Traveling Salesman Problem)는 조합 최적화 문제의 일종이다. 브루트 포스로 해결한가지 정말정말 무식한 방법이 있긴 하다. n개의 점들을 도는 순서를 순열을 통해 구해놓고, 그 경로를 따라 가면서 거리를 구하는 것이다. 하지만 알다시피, n개 점들의 순열의 경우의 수는 n!개이다... n이 20만 되어도 2,432,902,008,176,640,000가지, 한국말로 '243경' 개의 경우의 수를 따져 주어야 한다.동적 계획법으로 해결1~n번 도시가 있고, 이 중 몇 개의 도시를 거친 후에 지금 판매원이 i번 도시에 있다.그럼, 이 중에서 거쳐오지 않았던 도시들 중에서 다음 도시를 정해야 한다.우리는 다음 도시로 이동했다고 '가정' 하는 방식을 사용할 것이다.좀 더 이..

    실수형 (float) 자료형의 메모리 구조, 실제로 변환해보기

    exponent : 지수부 (지수 부분)matissa : 기수부 (분수 부분) float형 실수의 전체 구조 IEEE 754 표준은 binary32에 대해 다음과 같이 명시한다.부호 비트 : 1 비트지수부 비트 : 8 비트가수부 비트 : 정밀도는 24 비트 (실제로 메모리엔 23 비트로 표현) 부호부 1 비트는 실수값이 양수일 때 0, 음수일 때 1로 표현된다. 지수부 8 비트를 unsigned char로 봤을 때, 실제 값에서 127을 더한 값을 저장하며 저장된 값의 범위는 다음과 같다.stored bits :    0    actual value :  -127 (실제 지수값을 표현하는 것이 아닌 특정 의미가 있음)stored bits :    1    actual value :  -126stored ..

    float 자료형의 메모리 구조 (컴퓨터의 실수 표현)

    실수형은 IEEE의 부동소수점 형식을 사용하는데 4바이트(32비트) 표현의 경우 아래와 같이 이루어져 있다. 정수의 경우 2의 보수법을 이용해서 간단하게 메모리에 저장된 비트를 확인할 수 있지만 실수는 조금 더 복잡하다.아래의 단계를 거치면 실수가 메모리에 어떻게 표현이 되는지 알 수 있다. 위에 나와있는 -101.625를 컴퓨터의 표현 방법으로 바꿔보겠다1단계 - 이진수로 바꾸기이진수로 바꾸기 위해서는 나눗셈과 곱셈을 하면 된다. 일단 부호를 제외하고, 정수 부분은 2로 나누기를 연속으로 해서 2진수로 바꿔주자 101/2 = 50 ... 150/2 = 25 ... 025/2 = 12 ... 112/2 = 6 ... 06/2 = 3 ... 03/2 = 1 ... 1 정수 부분은 1100101 이다. 소수..

    실수의 부동 소수점 저장 방식

    정수의 저장 방식컴퓨터는 10진수로 표현 된 수를 0과 1로 저장하기 위해 2진수로 변환한 정보를 저장하게 된다.23을 예로 들면23=16(24)+4(22)+2(21)+1(20)이므로, 2진수로 표현하면 10111 이다.(물론 2진수로 변환하는 방법은 다양하다. 23을 2로 나누며 그때의 나머지를 계속해서 저장하는 방법 등. 그러나 뒤에서의 이해를 돕기위해 2의 제곱수로 표현함).이 10111의 수를 1Byte의 메모리에 0001 0111으로 저장하는 방식이다.실수의 표현 방식고정 소수점 방식단어 그대로 소수점의 위치를 고정시켜놓고 수를 표현하는 방식이다.예시) 123.45123.45는 10진수에서 소수점 밑의 두자리를 고정시켜놓고 표현한 것. 보다시피 "정수. 소수"의 형태로 나타낸다.이를 고정소수점 ..

    [C++] 조합 (Combination) 구할 수 있는 알고리즘

    개념n개의 값 중에서 r 개의 숫자의 순서를 고려하지 않고 나열한 경우의 수, 순열은 반대로 고려한다. 예시) [1,2] 와 [2,1] 이 있을 때 동일하게 여긴다는 의미계산식으로는 nCr 이라고 표현한다.nCr= nPr / r!= n! / ((n-r)! * r!)예시로 서로 다른 3개의 숫자(1,2,3) 중 중복되지 않으면서 순서와 관계 없이 2개를 뽑는다고 가정해보자3C2= 3! / 1! * 2!= 3! / 2!= (3x2x1) / (2x1)= 3로 총 3개의 경우의 수가 나오게 된다 (1,2 / 1,3 / 2,3) 조합의 점화식 n-1Cr-1 + n-1Crn-1Cr-1 : 어떤 특정한 원소를 포함시키고 뽑았을 때n-1Cr : 어떤 특정한 원소를 포함시키지 않고 뽑았을 때예시){1,2,3} 에서 3C..

    [C++] multimap 값 가져오기

    #include #include using namespace std;int main(){ multimap a; a.insert(pair(1, 2)); a.insert(pair(1, 2)); a.insert(pair(2, 4)); cout ::iterator it = a.begin(); it != a.end(); ++it) cout first second first second