널 문자
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
널 문자는 소스 코드에서 `\0`, `\x00` 등으로 표현되며, 대부분의 현대 문자 집합에서 코드 포인트 값 0을 가진다. C 언어와 C++에서는 문자열의 끝을 나타내는 중요한 역할을 하며, 널 종료 문자열로 불린다. 널 문자는 널 바이트 삽입 공격에 취약할 수 있으며, 유니코드에서는 널 문자(U+0000)와 널 기호(U+2400, ␀)가 별개의 문자로 정의된다.
더 읽어볼만한 페이지
- 제어 문자 - 공백 문자
공백 문자는 단어를 구분하고 텍스트의 구조를 나타내기 위해 사용되며, 언어와 컴퓨터 환경에 따라 다양한 형태로 존재하고 활용된다. - 제어 문자 - 이스케이프 시퀀스
이스케이프 시퀀스는 컴퓨터 주변 장치의 상태를 변경하는 문자열로, 초기 보도 코드에서 시작하여 ASCII 표준을 거쳐 발전했으며 터미널, 프린터, 모뎀 제어 등에 사용되고, C 언어에서는 백슬래시를 사용하여 특수 문자를 표현한다. - 취약점 공격 - 보안 취약점
보안 취약점은 시스템의 설계, 구현, 운영, 관리상 결함이나 약점으로, 위협에 의해 악용되어 시스템 보안 정책을 위반할 수 있는 요소이며, ISO 27005, IETF RFC 4949, NIST SP 800-30, ENISA 등 다양한 기관에서 정의하고 있다. - 취약점 공격 - 인터넷 보안
인터넷 보안은 사이버 위협, 악성 소프트웨어, 서비스 거부 공격 등으로부터 정보와 시스템을 보호하기 위해 네트워크 계층 보안, 다단계 인증, 방화벽 등 다양한 기술과 방법을 포괄한다.
널 문자 | |
---|---|
기본 정보 | |
![]() | |
유니코드 이름 | Null |
유니코드 번호 | U+0000 |
HTML 엔티티 | |
C 표현 | \0 |
아스키 코드 | 0 |
일반적인 사용 | |
용도 | 문자열 종료 패딩 |
표현 | 보이지 않는 문자 |
동작 | 아무런 동작도 수행하지 않음 |
역사 | |
기원 | 텔레타이프 기계에서 라인 피드 또는 캐리지 리턴과 같은 제어 문자를 보내는 데 걸리는 시간을 채우기 위해 도입됨. 펀치 카드 시스템에서 빈 공간을 표시하는 데 사용됨. |
프로그래밍 언어에서의 사용 | |
C/C++ | 널 문자는 문자열의 끝을 나타내는 데 사용됨. |
자바 | 자바 문자열은 널 문자로 끝나지 않음. |
기타 언어 | 다양한 방식으로 널 문자를 처리함. |
보안 문제 | |
널 문자 삽입 공격 | 널 문자를 입력값에 삽입하여 예상치 못한 동작을 유발할 수 있음. |
기타 | |
참고 | 널 포인터와 혼동하지 말 것. |
2. 표현
소스 코드에서 널 문자는 문자열 리터럴에서 이스케이프 시퀀스 `\0`으로 표현되는 경우가 많다.[8] 이는 C 언어를 포함한 많은 언어에서 사용되는 표기법이다. `\0`은 단순히 8진수 0을 나타내는 이스케이프 시퀀스이며, 뒤에 0부터 7까지의 숫자가 올 수 없다.[9] 다른 이스케이프 시퀀스로는 `\000`, `\x00`, `\z`, `\u0000` 등이 있다.
모든 현대 문자 집합에서 널 문자는 코드 포인트 값이 0이다. 대부분의 인코딩에서 이는 값이 0인 단일 코드 단위로 변환된다. 예를 들어, UTF-8에서는 단일 0 바이트이다. 그러나 수정된 UTF-8에서는 널 문자가 두 바이트 0xC0,0x80영어로 인코딩된다. 이렇게 하면 0x00 바이트를 문자열 종결자로 사용할 수 있다.[15][16][17][18][19]
C 언어와 C++에서 널 문자는 문자열의 끝을 나타내는 널 종료 문자열(null-terminated string)을 만드는 데 사용된다[15]. 즉, 문자열 마지막에 널 문자를 넣어 문자열의 끝을 표시한다. Java, .NET 등에서는 문자열이 길이 정보를 포함하는 데이터 구조로 표현되므로, 널 문자가 문자열 중간에 포함될 수 있다.
URL에서는 널 문자를 퍼센트 인코딩으로 표현하여 `%00`으로 나타낸다. 이는 널 바이트 삽입 공격을 방지하기 위함이다.[10]
캐럿 표기법에서는 널 문자를 `^@`로 표현한다. 일부 키보드에서는 Ctrl 키와 @ 키를 함께 눌러 널 문자를 입력할 수 있다.
문서에서는 널 문자를 "NUL" 기호(␀, 유니코드 U+2400)로 시각적으로 표현하기도 한다.
3. 인코딩
4. 프로그래밍 언어에서의 널
포인터 값이 널인 널 포인터는 아무것도 가리키지 않는 포인터를 나타낸다. 보통 메모리 주소 0을 사용하며, 이 주소를 읽으려고 하면 대부분의 운영 체제는 오류를 발생시킨다.
일부 언어에서는 0, '', "" 등이 널(NULL)과 같은 의미로 사용되기도 한다.
널 문자는 전신 타자기를 컴퓨터 출력 장치로 사용할 때 각 행의 끝에 추가되어 인쇄 기구가 행의 시작 부분으로 돌아갈 시간을 벌어주는 역할도 했다.
4. 1. 널 문자와 관련된 문제점
널 문자는 많은 프로그램에서 문자열의 끝으로 간주되므로, 이를 악용하여 '''널 바이트 삽입'''이라는 취약점을 만들 수 있으며, 이는 보안 익스플로잇으로 이어질 수 있다.[10]
이러한 특성 때문에 널 문자를 포함하는 데이터를 올바르게 처리하지 못하는 시스템도 있다. 예를 들어, CSS 2.1에서는 스타일 시트에 널 문자가 포함될 경우(이스케이프를 통해 생성된 경우 포함)의 동작이 정의되지 않았다.[19]
5. 널 바이트 공격과 보안
확인되지 않은 사용자 입력으로 널 문자를 입력할 수 있는 것은 '''널 바이트 삽입'''이라고 하는 취약점을 만들어 보안 익스플로잇으로 이어질 수 있다.[10] 널 바이트 삽입은 악의적인 사용자가 널 문자를 입력하여 시스템의 보안을 뚫는 공격 방법이다. 대한민국 정보보호 관련 기관들은 널 바이트 공격을 포함한 다양한 보안 위협에 대한 대응책을 마련하고 있다.
6. 유니코드
유니코드에서 널 문자(U+0000)와 널 기호(U+2400, ␀)는 별개의 문자이다.[21] 널 기호는 널 문자를 시각적으로 표현하기 위한 것이다.[21]
참조
[1]
간행물
ASCII format for Network Interchange
IETF
[2]
웹사이트
The set of control characters of the ISO 646
http://kikaku.itscj.[...]
Secretariat ISO/TC 97/SC 2
1975-12-01
[3]
웹사이트
Unicode Character 'NULL' (U+0000)
https://www.fileform[...]
2018-10-20
[4]
웹사이트
C0 Controls and Basic Latin
https://www.unicode.[...]
Unicode Consortium
2018
[5]
문서
"A byte with all bits set to 0, called the ''null character'', shall exist in the basic execution character set; it is used to terminate a character string literal."
[6]
문서
"A ''string'' is a contiguous sequence of characters terminated by and including the first null character"
[7]
ISO 14882 standard working draft
Working Draft, Standard for Programming Language C++
http://www.open-std.[...]
ISO/IEC
2013-02-27
[8]
서적
C
[9]
문서
In YAML this combination is a separate escape sequence.
http://www.yaml.org/[...]
[10]
웹사이트
Null Byte Injection
http://projects.weba[...]
[11]
웹사이트
ASCII format for Network Interchange
https://datatracker.[...]
2013-08-03
[12]
문서
"A byte with all bits set to 0, called the ''null character'', shall exist in the basic execution character set; it is used to terminate a character string literal."
[13]
웹사이트
空文字(ヌル文字 / NUL)とは - IT用語辞典 e-Words
https://e-words.jp/w[...]
[14]
웹사이트
null characterの意味・使い方|英辞郎 on the WEB
https://eow.alc.co.j[...]
[15]
문서
"A ''string'' is a contiguous sequence of characters terminated by and including the first null character"
[16]
웹사이트
Working Draft, Standard for Programming Language C++ (ISO/IEC 14882 standard working draft: N3337) - §17.5.2.1.4.1 Byte strings
https://www.open-std[...]
ISO/IEC
2012-01-16
[17]
웹사이트
MAN page of FIND
http://linuxjm.sourc[...]
[18]
웹사이트
Man page of FIND
https://linuxjm.sour[...]
[19]
웹사이트
4.1.3 Characters and case - Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification
https://www.w3.org/T[...]
W3C
2013-09-29
[20]
서적
C
[21]
웹사이트
Null Byte Injection
http://projects.weba[...]
[22]
웹사이트
http://krdic.naver.c[...]
[23]
웹사이트
http://tools.ietf.or[...]
[24]
웹인용
보관된 사본
http://www.itscj.ips[...]
2012-08-15
[25]
문서
"A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string literal."
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com