메인 콘텐츠로 건너뛰기
2038 버그 생존 가이드: 윤년 코드 문제에서 얻은 교훈
설명자

2038 버그 생존 가이드: 윤년 코드 문제에서 얻은 교훈

' 2038 버그'가 무엇인지, 왜 중요한지, 그리고 앞으로 시스템이 이 버그로 인해 다운되는 것을 방지하는 방법을 알아보세요.

The 2038 bug refers to a known issue with how millions of systems store and calculate dates and times. 이 버그로 인해 날짜와 시간이 잘못 표시될 것으로 예상됩니다 starting January 19, 2038.

여러분은 속으로 “날짜가 틀렸다고?”라고 생각하고 계실지도 모릅니다. 시기가 안 좋았나? "그래서 뭐!" 하지만 정기적으로 이체와 결제를 처리하는 은행 데이터베이스에 잘못된 날짜가 입력되어 있다면 어떨까요? 아니면 서버의 시간이 잘못 설정되어 웹사이트의 SSL 인증서가 만료됨으로써 방문자들이 잠재적인 보안 위험에 노출되는 경우는 어떨까요?

The reality is the 2038 bug isn't the first and won't be the last time date and time calculation issues have affected the systems we use daily.

사실, 2024 년은 윤년이므로, 시스템에서 윤년을 처리하는 데 따르는 문제점들과 다가오는 2038 bug to 년 사이에는 많은 유사점을 찾아볼 수 있으며, 이를 통해 날짜와 시간 계산 오류의 원인과 그로 인한 잠재적 영향을 더 잘 이해할 수 있습니다.

2038 bug is 은 가상의 시나리오가 아니라, 임베디드 시스템/기기, 사물인터넷(IoT) 기기, 운영 체제, 데이터베이스, 서버, 네트워크, 애플리케이션, 웹 서비스 등 광범위한 시스템에 영향을 미칠 수 있는 실제적인 위협입니다. 이 글은 ‘ 2038 bug is’이 무엇인지에 대한 더 깊은 이해를 돕고, 머지않은 미래에 발생할 수 있는 중대한 문제를 예방하기 위해 오늘부터 바로 실천할 수 있는 실제 사례와 모범 사례를 소개하고자 합니다.

First, we'll provide a brief overview of similar problems that can occur when calculating leap years in systems to help set the stage for understanding the more complex 2038 bug and why it matters for device security.

윤년이 날짜와 시간 계산에 대해 우리에게 알려주는 점

2024년에는 전 세계가 드문 현상인 윤년을 맞이하게 될 것입니다. 즉, 2월은 28일 중 29 days instead 일이 되며, 달력에 하루가 더 추가되는 셈입니다... 그리고 일부 소프트웨어 및 하드웨어 시스템에서는 설명할 수 없는 하루가 생기게 됩니다.

왜 그럴까요? 많은 레거시 시스템에는 윤년에 대한 논리가 지나치게 단순화되어 있어, 시스템이 2월 28일 에서 3월 1일로 잘못 건너뛰는 경우가 발생할 수 있으며, 이로 인해 날짜 및 시간 계산에 오류가 발생할 수 있습니다.

어떤 해가 윤년인지 판단하는 데 사용되는 일반적인 규칙은, 그 해가 4로 나누어 떨어지는지 여부입니다. 그러나 이 계산에 일반적으로 반영되지 않는 추가적인 예외 사항들이 있어 계산 결과가 부정확해질 수 있습니다. 연도는 4로 나누어 떨어져야 합니다. 단, 해당 연도가 100로도 나누어 떨어진다면는 예외이며, 400로도 나누어 떨어진다면 는 예외입니다 .

the year 2100 을 예로 들어 봅시다. 2100 은 4로 나누어 떨어지기 때문에, 일부 시스템에서는 이를 윤년으로 잘못 판단할 수도 있습니다. 나머지 윤년 계산 논리를 적용하면, 2100 은 100로 나누어떨어지지만, 400으로 나누어떨어지지 않음을 알 수 있습니다. 그러니까 2100 은 사실 이며, 처럼 윤년이 아닙니다.

4년에 한 번씩 하루를 건너뛰는 것은 사소한 문제처럼 보일 수 있지만, 이와 같은 날짜 및 시간 계산 문제는 시스템과 사용자에게 심각한 결과를 초래할 수 있습니다.

날짜 및 시간 계산 문제와 관련해 또 다른, 더 불길한 사례로는 곧 다가올 ‘ 2038 bug’이 있는데, 이는 컴퓨터와 기기에 심각한 문제를 일으킬 가능성이 있습니다. 이 사례가 정확히 무엇이며, 왜 그런지 좀 더 자세히 살펴보겠습니다.

' 2038 bug'이란 무엇인가요?

' 2038 bug'은 '유닉스 밀레니엄 버그' 또는 ' Y2K38'라고도 불리며, 일부 시스템이 타임스탬프라고 하는 숫자를 사용하여 날짜 및 시간 값을 저장하고 표현하는 방식에서 비롯된 문제입니다.

타임스탬프는 ‘ 1070년 1월 1일’부터 경과한 초 수를 말하며, 이를 유닉스 에포크라고 합니다. 예를 들어, the timestamp for January 1, 2024, 01:00:00 UTC, is 1704070800, 이는 에포크 이후 means 1704070800 초가 지났음을 나타냅니다.

그러나 일부 시스템 에서는 a signed 32-bit integer to 이라는 데이터형을 사용하여 유닉스 운영 체제 및 그 파생 운영 체제에서 타임스탬프를 저장합니다. A signed 32-bit integer can 는 -2147483648부터 2147483647까지의 숫자만 저장합니다. 즉, 이 시스템들이 처리할 수 있는 가장 큰 타임스탬프는 2147483647이며, 이는 03:14:07 UTC 기준 to January 19, 2038에 해당합니다. 그 후, 타임스탬프가 오버플로우되어 음수가 되며, 이로 인해 날짜와 시간이 잘못 표시됩니다.

예를 들어, the timestamp for January 20, 2038는 유닉스 타임으로 환산하면 2147483648이 됩니다. 이는 유닉스 형식을 사용한 유효한 타임스탬프가 아니므로, 오버플로우가 발생하여 -2147483648이 되며, 이는 1901년 12월 13일에 해당하는 20:45:52 UTC 시점입니다. 이건 the year 2038 bug입니다.

2038 버그의 영향을 받는 시스템 유형

많은 사람들은 이 버그가 날짜와 시간을 저장할 때 32비트 부호 있는 정수를 사용하는 시스템에 심각한 문제를 일으킬 것으로 예상하며, 이로 인해 시스템 충돌, 오류, 데이터 손실 등 기능 및 보안에 영향을 미칠 수 있는 부정확하고 예측 불가능한 동작이 발생할 수 있다고 보고 있습니다.

2038 버그의 영향을 받을 수 있는 날짜와 시간을 저장하기 위해 유닉스 기반 타임스탬프를 사용하는 것으로 알려진 시스템의 유형을 살펴보겠습니다:

  • 데이터베이스: 관계형 데이터베이스 및 NoSQL 데이터베이스를 포함한 다양한 데이터베이스 유형
  • C 프로그램: C 프로그램 및 C++, PHP 등 C를 기반으로 한 언어로 작성된 기타 프로그램
  • 임베디드 시스템 및 장치: 의료 기기, 발전소 등의 시설을 위한 산업용 제어 시스템, 전자식 안정성 제어(ESC) 및 트랙션 컨트롤(TCS)을 모니터링하는 온보드 컴퓨터 시스템이 탑재된 자동차, 라우터, 스위치, 센서, 센서, 그리고 스마트 가전제품과 같은 IoT 기기
  • 의 운영 체제: Windows, Linux, 그리고 안드로이드 및 iOS와 같은 휴대전화용 리눅스 기반 운영 체제

2038 년 버그의 최근 사례들

일부 시스템에서는 이미 2038 bug in 이 다양한 방식으로 미치는 영향을 보여주고 있습니다.

예를 들어, 개발자들은 일정 수립, 만료일 설정 또는 암호화 등의 목적으로 먼 미래의 날짜를 사용할 수 있는데, 9999-12-31 와 같은 날짜를 자리 표시자로 사용하여 기간을 불특정 또는 무한대로 설정하는 경우가 그 예입니다. 그러나 이 날짜는 대략 253402236000 에 해당하며, 유닉스 타임 형식의 최대값을 훨씬 초과합니다.

다른 사람들은 테스트나 시뮬레이션 목적으로, 또는 서기 이전의 역사적·지질학적 사건을 표현하기 위해 2038 을 초과하는 미래의 날짜를 사용할 수도 있습니다. 이러한 모든 시나리오에서, 연도 2038 problem can 은 잘못된 출력, 오류 및 신뢰할 수 없는 결과를 초래합니다.

다음은 유닉스 타임스탬프 사용과 관련하여 이미 유사한 문제를 겪은 시스템의 실제 사례들입니다:

  • 서버 다운: 2006년 5월 13일, AOLserver, AOL의 오픈소스 웹 서버 (새 탭에서 열림)가 데이터베이스 요청 타임아웃을 10억 초, 즉 약 32 years in 년 후로 설정하여 다운되었습니다.
  • 예기치 못한 가동 중단: 한 대형 전문 소매업체에서 VPN 하드웨어 장애가 발생했습니다. (새 탭에서 열림) 이는 인증 기관(CA) 오류로 인해 ‘notBefore’(CA가 유효하지 않은 날짜 이전)와 ‘notAfter’(만료일)라는 두 가지 날짜를 계산하는 과정에서 오류가 발생했기 때문입니다. 추가적인 NTP(네트워크 시간 프로토콜) 문제로 인해 CA는 현재 시간이 2037이라고 판단했고, CA가 인증서의 유효 기간을 10년으로 설정해 두었기 때문에 만료일을 계산할 때 2038 문제가 발생했습니다.
  • 시스템 오류: 2014에서, ‘강남 스타일’ 뮤직비디오는 (새 탭에서 열림) 두 가지 기록과 유튜브 자체를 동시에 깼는데, 이는 조회수가 hit 2.147.483.647 회였기 때문이며, 이 조회수는 유닉스 시스템이 기록할 수 있는 최대값이기도 하기 때문이다.

2038 bug을 예방하기 위한 팁

2038 bug requires 을 수정하여 시스템 내의 32비트 부호 있는 정수 데이터 유형과 이 데이터 유형과 상호작용하는 모든 코드를 업그레이드, 제거 또는 교체하는 작업은 비용이 많이 들고 시간이 오래 걸릴 수 있습니다. 하지만 지금부터 시스템, 애플리케이션 및 기기를 최신 상태로 유지하기 위해 다음과 같은 예방 조치를 취한다면, 1월 19일이 되었을 때 상당한 차이를 만들 수 있습니다:

  • 날짜 및 시간 값을 저장하고 표현하는 데 64비트 형식 을 사용하면 가능한 값의 범위가 수십억 년으로 확장됩니다.
  • ISO 8601 형식과 같은 값을 저장하고 표현하기 위해 다양한 날짜 및 시간 형식 을 사용합니다.
  • 에 잠재적인 날짜 및 시간 관련 문제가 있는지 테스트 및 감사를 수행하여, 2038 버그에 취약할 수 있는 구식 코드, 라이브러리 또는 소프트웨어를 파악합니다.
  • 코드, 소프트웨어 및 장치를 정기적으로 업데이트하고 패치를 적용하여 최신 표준 및 기술과 호환되도록 보장합니다.

이미 많은 기업들이 the year 2038 problem and 을 인지하고 있으며, 타임스탬프와 날짜 값에 대한 their systems to use 64-bit data 유형 또는 대체 표현 방식을 업데이트하기 위해 선제적인 조치를 취하고 있습니다. 예를 들어, 애플은 2003 (새 탭에서 열림)부터 macOS에 64비트 지원을 구축하기 시작했으며, 이를 통해 Mac 사용자가 issues with dates after January 2038와 같은 문제를 겪지 않도록 할 수 있습니다.

the year 2038 problem be 번 문제를 풀 수 있을까요?

2038 bug and 년과 2024 년 모두 윤년이라는 사실은, 날짜와 시간 계산이 단순한 문제가 아니라 코드 및 소프트웨어 개발에서 복잡하고 중요한 요소임을 상기시켜 줍니다. 다행인 점은, 선제적인 조치를 취한다면 the year 2038 problem is 이 일부 기사에서 묘사하는 것처럼 피할 수 없는 종말이 아니라는 것입니다.

잠재적인 문제를 파악하고 해결책의 우선순위를 정함으로써, 2038 bug and 의 영향을 더 쉽게 최소화할 수 있으며, 이를 통해 시스템이 오랫동안 원활하고 안전하게 운영되도록 할 수 있습니다.

여러분의 환경에서 ‘ 2038 bug in ’ 문제를 어떻게 해결하기 시작할 수 있을까요? 한 가지 방법은 자사와 해당 자산의 소프트웨어 상태에 대한 포괄적인 가시성을 확보하는 것입니다. By monitoring and scanning your endpoint devices (opens in a new tab) regularly, you can more easily identify devices running outdated code or software, replace any devices near the end of their life cycles, or update those using 32-bit systems that may be more prone to the 2038 bug.

2038 버그를 처리하는 데이터 유형과 코드를 변경하면 오류, 호환성 문제 및 성능 저하가 발생할 수 있으므로, 기기를 실시간으로 모니터링하면 잠재적인 취약점과 엔드포인트 보안 위험을 더 효과적으로 예방할 수 있습니다. (새 탭에서 열림).

Tanium 플랫폼이 엔드포인트 관리를 간소화하도록 어떻게 설계되었는지 확인해 보세요. (새 탭에서 열림) 또한, 구성 적용 자동화, 위협에 대한 신속한 대응, 직원이 일반적인 문제를 직접 해결할 수 있도록 지원하는 등, 단일 솔루션 내에서 업무 효율을 높이고 사용자에게 자율성을 부여하는 다양한 기능을 제공합니다.

또한, 자율 엔드포인트 관리(AEM) (새 탭에서 열림)에 대한 당사의 접근 방식은 Tanium XEM 플랫폼에 AI 지원 기능을 더욱 통합하여, 안전성, 보안성 및 확장성을 고려하여 설계된 자동화 권장 사항과 이와 연계된 정밀하게 조정 가능한 스마트 액션을 제공할 것입니다.