<#
.Synopsis
This function will set the proxy settings provided as input to the cmdlet.
.Description
This function will set the proxy server and (optional) Automatic configuration script.
.Parameter Proxy Server
This parameter is set as the proxy for the system.
Data from. This parameter is Mandatory.
.Example
Setting proxy information.
Set-NetProxy -proxy "proxy:7890"
.Example
Setting proxy information and (optional) Automatic Configuration Script.
Set-NetProxy -proxy "proxy:7890" -acs "http://proxy Jump :7892"
#>
Function Set-NetProxy
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[String[]]$Proxy,
[Parameter(Mandatory=$False,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[AllowEmptyString()]
[String[]]$acs
)
Begin
{
$regKey="HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
}
Process
{
Set-ItemProperty -path $regKey ProxyEnable -value 1
Set-ItemProperty -path $regKey ProxyServer -value $proxy
if($acs)
{
Set-ItemProperty -path $regKey AutoConfigURL -Value $acs
}
}
End
{
Write-Output "Proxy is now enabled"
Write-Output "Proxy Server : $proxy"
if ($acs)
{
Write-Output "Automatic Configuration Script : $acs"
}
else
{
Write-Output "Automatic Configuration Script : Not Defined"
}
}
}
Function Disable-NetProxy
{
Begin
{
$regKey="HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
}
Process
{
Set-ItemProperty -path $regKey ProxyEnable -value 0 -ErrorAction Stop
Set-ItemProperty -path $regKey ProxyServer -value "" -ErrorAction Stop
Set-ItemProperty -path $regKey AutoConfigURL -Value "" -ErrorAction Stop
}
End
{
Write-Output "Proxy is now Disabled"
}
}
The xmlrpc.php file can be found in the WordPress core and is generally enabled by default, which leaves your WordPress site exposed to all kinds of malicious attacks.
We are going to look at what the XMLRPC file is, what it does, and, more importantly, how to manage it while boosting your website’s security.
New Plans and Pricing Now Available!
Servebolt’s new plans and pricing model put a greater focus on customization and flexibility while taking advantage of our amazing performance and scalability.
✅ More storage included in all plans ✅ Lower storage pricing ✅ More cost-efficient scaling of traffic and Dynamic Requests ✅ More production environments in all plans ✅ More Servebolt CDN hostnames included in all plans
XML-RPC (eXtensible Markup Language – Remote Procedure Call) was created to offer cross-platform communication. This is a protocol that uses HTTP as a transport and XML as an encoder to generate procedure calls, thus allowing for the ability to run functions on a remote computer.
HTTP requests can be sent by the client (i.e., browser or mobile app) to the server, and the server then sends an HTTP response. The HTTP request can be used to invoke functions, and these functions can then be used to perform specific actions.
This is different from the REST API, as that uses URL parameters to identify resources. In contrast, RPC uses query parameters to offer function arguments.
XMLRPC allows users to interact with their site remotely, such as through the WordPress mobile app or via plugins like JetPack or WooCommerce.
The Security Issues Associated With The xmlrpc.php File
XMLRPC can expose your site to a variety of attacks. Since it’s easy to trace, hackers can send arbitrary XML data, which then allows them to control the site in a number of ways. Here are some security issues that you should know about.
Brute Force Attacks
In a brute force attack, the hackers essentially try to guess the correct password and user name using pure brute force – by attempting thousands of combinations.
If you have a weak admin password and aren’t using multi-factor authentication, there’s a chance that a hacker can brute force their way into your website’s backend.
WPSCAN, a popular tool from Kali Linux, can be used to easily find and list all valid usernames for the website. Once that’s done, hackers can use brute force via the xmlrpc.php file by sending the following request:
This way, hackers can send thousands of combinations until the site sends the correct password. A response indicating that an incorrect input, while also telling the hacker to try again, is shown below:
It returns the HTTP 200 code, indicating that the username and password are incorrect. Hackers don’t even have to worry about reCaptchas or limited login attempts if security is low.
DDoS Attacks
Distributed Denial of Service, or DDoS attacks, can completely take a server offline by sending thousands of requests simultaneously. The pingback feature in WordPress is commonly used by hackers in combination with the xmlrpc.php file to run DDoS attacks.
Usually, hackers find a page that they can target multiple times and then start attacking it. To start the attack, the hacker begins by checking for the xmlrpc.php file. They do this by sending this request:
Once the hackers have confirmation that the xmlrpc.php file is enabled, they then start attacking it with a network of exploited websites to send different pingback requests.
In many cases, this can be automated using the following code:
Cross-site Port Attacks (XSPA) are quite common. Hackers generally initiate these attacks by injecting malicious code to receive information about IP addresses and TCP ports.
Hackers use the pingback.ping technique to pingback a post on a website, which returns the IP address. Then, they use a sniffer to establish an endpoint to send a live blog post URL and a pingback using the following request:
<methodCall> <methodName>pingback.ping</methodName> <params><param> <value><string>http://<YOURSERVER >:<port></string></value> </param><param><value><string>http://<SOMEVALID BLOG FROM THE SITE ></string> </value></param></params> </methodCall>
How to Block XMLRPC Attacks
There are several methods you can use to block XMLRPC attacks – most of which you’ll come across are ineffective – here’s how we recommend addressing this:
How Accelerated Domains and Servebolt CDN Handles XMLRPC Issues
Servebolt has two products that perform XMLRPC security out of the box. They both take the approach that some traffic to this place can be valid, but too much or too often is a sign of a hack attempt.
For example, ourAccelerated Domainsimplementation listens to requests toxmlrpc.php, if there are more than 15 requests in a minute, it will ban that IP address for a whole day. This effectively stops the hack attempt while allowing users of the website via WordPress Mobile or users of Jetpack/WooCommerce to continue to work.
The Servebolt CDN deals with it slightly differently, it also has a threshold of 15 requests per minute from the same IP address to thexmlrpc.php and then bans the IP address for 1 hour.
If you’ve already made the (wise 😄) decision to host your WordPress websites with us – when using Servebolt’s CDN or Accelerated Domains – one of these security options is automatically implemented for you.
Blocking XMLRPC on Cloudflare
It is possible to block traffic toxmlrpc.phpdirectly on Cloudflare, stopping it from ever reaching your server.
This is only a really valid solution if you are also blocking traffic that is not originating from Cloudflare. If you have not already set this up, then it will still be possible for hackers to attempt to access and exploit it on your origin server directly. And, of course, this is easily configurable in just a single click via the Servebolt admin interface.
Where this will help is that, like with Accelerated Domains or CDN from Servebolt, thexmlrpc.phptraffic from bad actors is stopped at the edge long before it reaches the server.
To block all traffic, login to Cloudflare admin, select the domain, click Security, click WAF, create a new firewall rule, and enter the details as shown in the photo below:
Rule Name = whatever you want to call it
Field = URI Path
Operator = equals
Value = /xmlrpc.php
Or you can “edit the expression” and paste it into the following code:
(http.request.uri.path eq "/xmlrpc.php")
Choose the action of “Block” and save & deploy it.
Remember: because you have set this up, you will have to remember it exists. There might be a time in the future when you are wondering whyxmlrpc.phpis not working, and you cannot see it in your server configuration.
Note:If you use this method, you must ensure that your server is configured only to allow traffic that is coming through Cloudflare. As otherwise, it would be possible to bypass this.
In Servebolt, this can be enabled in the control panel:
Alternative Method: Disabling XMLRPC On The Server Altogether
On Apache Servers
A better alternative is to disable the XMLRPC file altogether. This is possible on Apache by just adding a snippet of code in your .htaccess file just before the firm rules added by WordPress:
This is a wise option as it eliminates the misuse of XMLRPC, though there’s a downside: you’ll be disabling remote access to your site. As a result, the mobile app – or Jetpack, for that matter – won’t work properly.
On Nginx Servers
Disabling Nginx is slightly harder as you need to have server configuration access rather than the more simple .htaccess of Apache. To disable, edit the virtual host config file, usually located in /etc/nginx/sites-available and add the following directive to the server block:
server { # // your standard server root and configuration location = /xmlrpc.php { deny all; } # // rest of the server configuration such as PHP-FPM }
Servebolt uses the .htaccess method to deploy this solution to xmlrpc.php. If you are with a managed host like Servebolt and are using Nginx you will most likely need them to implement this for you.
Why Installing a Security Plugin Isn’t a Wise Idea
Most people might be thinking of installing a WordPress security plugin on their site. However, that’s not actually a good idea for several reasons:
The request toxmlrpc.phpwill still be happening, with the security plugin sat in between it and WordPress, using up system resources that will fail quicker in the event of an attack.
They are primarily effective at the application level, not at the server level.
They add unnecessary code to your site, affecting its performance.
They require constant load management.
Security plugins mess with crucial parts of WordPress security, including login – with just a single mistake in code that runs as a part of logins, your site is at greater risk.
Conclusion
Cyberattacks are getting more sophisticated day by day. As a webmaster & business owner, it’s essential to be aware of and understand potential threats and the steps you can take to protect yourself against them. The majority of which can be mitigated with the help of a proactive approach – a combination of monitoring and keeping software up-to-date as well as taking advantage of solutions like Accelerated Domains. When enabled,Accelerated DomainsorServebolt CDNintelligently filters traffic and automatically takes action to protect your website from harmful attacks, ultimately keeping your origin server secure and your site safe.
Any specific questions about XMLRPC or security?Get in touch with us – ourexpert, friendly, and thoroughsupport team is here to help.
XCP 데이터는 XCP 마스터 (측정/캘리브레이션 툴/시스템) 와 XCP 슬레이브 (ECU, Runtime 환경 등) 사이에 메시지 전송 방식으로 교환된다.
전송되는 XCP Message Frame 에 대해 설명하기에 앞서 XCP 통신 모델에 대해 정리하자면, XCP 패킷을 통한 통신은 명령어 (CTO) 를 위한 영역 하나와 동기화 데이터 (DTO) 발송을 위한 영역 하나로 구분된다.
※ CTO (Command Transfer Object) : 명령어 전송에 사용되는 패킷
※ DTO (Data Transfer Object) : 측정/신호 인가 데이터를 동기적으로 교환하는데 사용되는 패킷
CTO / DTO 기반의 XCP 통신 모델
위의 통신 모델에서 사용된 약어는 다음과 같다.
약어
풀이
설명
CMD
Command Packet
명령어 전송 패킷
RES
Command Response Packet
긍정적 응답
ERR
Error
부정적 응답
EV
Event Packet
비동기 이벤트
SERV
Service Request Packet
서비스 요청
DAQ
Data AcQuisition
주기적인 측정값 전송
STIM
Stimulation
슬레이브의 주기적인 신호 인가
XCP Message Frame 전체는 Trasnport Layer 의 Frame 에 포함된다. (e.g. XCP on Ethernet 의 경우, UDP or TCP Packet 내에 포함)
XCP Message Frame 및 각 필드의 의미는 아래와 같다.
XCP Message Frame
Term
Description
XCP Message (Frame)
XCP에서, Master 와 Slave 간 교환하는 메시지 형태
XCP Header
전송 프로토콜 (CAN, FlexRay, CAN-FD, Ethernet 등) 에 의존하는 값
XCP Tail
전송 프로토콜 (CAN, FlexRay, CAN-FD, Ethernet 등) 에 의존하는 값
XCP Packet
XCP 통신에 활용되는 데이터
Identification field
XCP 통신에 사용되는 패킷 식별자로서, Master 와 Slave에서 어떤 메시지를 보냈는지 확인하기 위한 필드
PID
패킷을 식벽하는데 사용되는 필드로 CTO 를 전달할 때, PID 필드는 CMD, RES 또는 다른 CTO 패킷을 식별하기에 사용 XCP 슬레이브는 마스터에게 0xFC ~ 0xFF 주소의 PID 필드를 활용해 응답하거나 통지를 보낸다. DTO를 전송할 때는 식별 필드(FILL, DAQ 등)의 다른 요소도 사용한다.
FILL
alignment를 위해 사용되는 필드로 DAQ(Data Acquisition; 데이터 획득) 측정방법에 사용 특정 이벤트, 신호에 대한 데이터 수집에 사용
DAQ
XCP는 특정 파라미터의 값을 읽기 액세스를 통해 측정하는데 해당 방법을 하기 위해서는 이벤트와 파라미터가 Mapping 되어야 하며 측정방법(주기)에 대한 정보가 필요하다. 이러한 Mapping 정보를 저장한 것이 DAQ List 이고 해당 필드가 이 DAQ List 의 수 나타낸다.
Timestamp Field
메시지 전송 시간을 나타내는 필드 (DTO 메시지 전송에만 사용한다.) 슬레이브는 측정값에 시간 정보를 담기 위해, 타임스탬프를 사용한다.
TIMESTAMP
DTO를 전달받은 마스터는, 측정 값과 슬레이브에서 측정값을 획득한 시점을 가지게 된다. – 동기화(Synchronize) 관점에서 사용.
Data Filed
XCP 패킷에는 데이터 필드에 지정된 데이터도 들어있다.
DATA
CTO 패킷의 경우, 명령어에 대한 파라미터가 들어있다. DTO 패킷의 경우, 슬레이브에서 보낸 측정값과 마스터에서 이 값을 보낸 시점이 들어있다. (DTO 패킷의 경우, TIMESTAMP 는 측정 시간, DATA 에는 마스터에서 요청한 시간이 들어감)
Reference
Andreas Patzer,Rainer Zaiser, XCP-ECU 개발을 위한 표준 프로토콜 - 프로토콜 기초와 응용분야 (Vector, 2014)
[연재 1] 1. 개요 2. 주요 내용 3. 방법론 4. 자동차 관련 취약점 - 건초 더미에서 바늘 찾기4.1 심각도 vs. 관련성 4.2 악명 높은 공급망 취약점 [연재 2] 5. 노후화된 소프트웨어 관련 위험 6. 자동차 소프트웨어에 영향을 미치는 메모리 손상 7. 결론
1. 개요
커넥티드 카(Connected car)의 등장이 현실이 되었다. 커넥티드 카는 기존의 운송 수단 및 모빌리티 서비스를 혁신할 자율주행 기술과 관련된 중요한 이정표를 제공한다. 그러나 이와 같은 발전에는 도전이 따른다.
증가하고 있는 자동차 산업에 대한 사이버 보안 위험에 대한 효과적인 사이버 보안 조치가 없을 경우 공격 표면이 넓은 최신 사양의 자동차는 물리적 손상을 일으킬 수 있는 각종 악의적인 활동에 취약할 수밖에 없고, 이에 따라 운전자와 보행자 모두의 안전에 영향을 미칠 수 있다.
각종 보안 위협에 대한 업계 전반의 인식은 UNECE WP.29 및 ISO/SAE 21434와 같은 국제표준에서도 분명히 드러난다. 두 국제표준 모두 OEM이 공급업체(Suppliers), 서비스 제공업체, 기타 조직과 관련된 다양한 위험을 관리하여 자동차 분야의 사이버 보안을 책임져야 한다고 규정하고 있으며, 다음과 같은 내용을 중심으로 자동차 사이버 보안에 대한 근본적인 변화를 주도한다.
1) 제품의 설계 및 개발 과정의 초기 단계에서 보안 관련 문제를 해결하는 “시프트 레프트(shift left)” 접근방식 도입 2) 제품의 개발, 생산, 운행, 폐기 등 자동차의 라이프사이클 전반에 걸친 사이버 보안 관리의 필요성 3) 자동차 공급망 전반에 걸친 사이버 보안 책임 강화
그러나 자동차 분야의 사이버 위험을 관리하는 것은 간단하지 않다. 제품 보안팀은 제한된 인력으로 일상적으로 발생하는 다양한 보안 문제를 관리하고 자동차 분야 제조업체의 디지털 혁신까지 지원해야 하기 때문이다.
이스라엘 자동차 사이버 보안 위험 평가 전문 기업인사이벨리움(Cybellum)의 ‘2021 자동차 소프트웨어 보안 현황 보고서’는 2020년부터 2021년에 걸쳐 발견된 100개 이상의 자동차 소프트웨어 컴포넌트에 대한 취약점 분석을 기반으로 자동차 소프트웨어와 관련된 주요 보안 위험을 조명한다.
2. 주요 내용
1) “일반적인” 취약점과 다른 자동차 소프트웨어 취약점
2020년에는 그 어느 때보다 많은 취약점이 발견되었지만, 그 중 극히 일부 취약점만이 자동차 소프트웨어에 영향을 미치는 것으로 나타났다. 이는 자동차 산업이 복잡하고 다양한 공급업체와 연관되어 있기 때문이다. 자동차 산업의 보안을 위협하는 취약점을 탐지하는 것은 건초 더미에서 바늘을 찾는 것만큼 까다롭다.
2) 공급망 취약점의 영향을 받는 자동차 소프트웨어
자동차 산업의 공급망은 다수의 복잡한 공급업체로 구성되므로, 이미 오래 전에 발견된 취약점과 최근 새롭게 발견된 취약점 모두의 영향을 받는다. 사이벨리움의 연구에 따르면, 4년 전 발견된 취약점인 ‘BlueBorne’과 같이 상당히 오래된 취약점과 ‘Ripple20’과 같이 최근 새롭게 발견된 취약점 모두 자동차 소프트웨어에 영향을 미치고 있는 것으로 나타났다.
3) 노후화된 소프트웨어로 인한 운영 상의 위험이 발생할 가능성
현재 자동차 제조업체는 다수의 노후화된 소프트웨어를 사용하고 있다. 특히 사이벨리움이 분석한 자동차 ECU 중 90%가 안전한 최신 버전의 소프트웨어를 사용할 수 있음에도 개발 시점이 5년 이상 경과한 오래된 소프트웨어를 사용하고 있는 것으로 나타났다. 최신 상태로 유지 및 관리되지 않는 소프트웨어는 운영 상의 심각한 사이버 보안 문제를 초래할 수 있다.
4) 메모리 손상(Memory Corruption)으로 인한 자동차 소프트웨어 보안 위협
자동차 소프트웨어에 영향을 미치는 대부분의 코딩 관련 약점은 다양한 메모리 관리와 관련된 오류로 인해 발생한다. 버퍼 오버플로(Buffer Overflow), Null 역참조, Use-After-Free 취약점 등의 메모리 손상(Memory Corruption) 취약점은 이미 수년 전에 발견된 것으로 위험도가 낮은 수준의 약점에 해당하지만, 최근 자동차 소프트웨어의 보안에 많은 영향을 미치는 것으로 확인되었다.
3. 방법론
사이벨리움은 ‘2021 자동차 소프트웨어 보안 현황 보고서’를 통해 자동차 소프트웨어 보안의 현재 상태에 대한 심층적인 분석을 제공한다. 보고서의 핵심 내용은 2020년에서 2021년 사이에 발견된 100개 이상의 자동차 소프트웨어 컴포넌트에 대한 분석이며, 이와 관련하여 보고서에 포함된 일부 정보는 오픈소스 소프트웨어를 기반으로 작성되었다.
4. 자동차 관련 취약점
건초 더미에서 바늘 찾기
취약점으로 인한 사이버 공격 피해를 최소화하기 위해서는 취약점 완화의 우선 순위를 지정하는 것이 중요하지만, 자동차 대상의 취약점이 크게 증가하면서 심각도에 따른 취약점 우선 순위 지정 프로세스가 지연되고 있다. 특히 일반적으로 공개되는 취약점이 모두 자동차 소프트웨어에 영향을 미치는 것이 아니기에 자동차와 관련된 취약점을 명확하게 식별하는 것이 쉽지 않고, 이에 따라 적절한 시기에 취약점을 완화하고 해결하지 못하는 사례가 발생하고 있다. 이는 궁극적으로 자동차의 컴포넌트 및 자동차 산업 분야에 속한 조직의 사이버 복원력에 악영향을 미칠 수 있다.
표 1 – 공개된 CVE (Common Vulnerabilities and Exposure) 취약점 (출처: NIST NVD,https://nvd.nist.gov)
소프트웨어의 유효성에 대한 적절한 테스트가 이루어지지 않을 경우 공격자는 특정 형식을 악용하여 입력을 조작할 수 있으며, 이에 따라 응용 프로그램이 의도하지 않은 입력 값을 수신하게 된다. 이 경우 제어 흐름, 리소스에 대한 임의 제어 또는 임의 코드 실행이 이루어질 수 있기 때문에 소프트웨어에 악영향을 미칠 수 있는 취약점을 적절하게 식별할 필요가 있다.
이와 관련하여 아래표 2의 구글(Google)에서 가장 많이 검색된 10개의 CVE 취약점과 사이벨리움이 분석한 자동차 소프트웨어 관련 CVE 취약점 비교 자료를 통해 비교해 볼 때, 일반적인 취약점 목록과 자동차 소프트웨어에 영향을 미치는 취약점 목록이 큰 차이점을 보인다는 것을 알 수 있다. 구글에서 가장 많이 검색된 CVE 취약점은 대부분 엔터프라이즈 및 IT 제품에 영향을 미치는 취약점에 해당하기 때문에 자동차와 관련된 임베디드 시스템과는 차이가 있다.
가장 많이 검색된 CVE (조사 기관: Google)
가장 인기 있는 주요 자동차 CVE (조사 기관: 사이벨리움)
CVE
CVSS점수
영향을 받는 소프트웨어
CVE
CVSS점수
영향을 받는 소프트웨어
2019-0708
9.8
Remote Desktop Services
2020-11656
9.8
SQLite
2017-11882
7.8
Microsoft Office
2019-19646
9.8
SQLite
2017-0199
7.8
Microsoft Office
2019-8457
9.8
SQLite
2018-11776
8.1
Apache Struts
2019-5482
9.8
cURL
2018-5638
10
Jakarta Multipart parser
2018-16842
9.1
cURL
2019-5544
9.8
OpenSLP (ESXi / Horizon DaaS)
2018-14618
9.8
cURL
2017-0143
8.1
SMBv1 server (Microsoft Windows)
2017-12652
9.8
libpng.
2020-0549
5.5
Intel(R) Processors
2017-109189
9.8
SQLite
2020-2555
9.8
Oracle Coherence
2018-1000301
9.1
cURL
2018-7600
9.8
Drupal
2018-1000120
9.8
cURL
표 2 – 일반 CVE 및 자동차 관련 CVE 비교
4.1 심각도 vs. 관련성
표 2에서 CVSS 점수로 표시된 취약점의 심각도를 통해 각 취약점이 자동차 보안에 미치는 영향을 확인할 수 있지만, 이러한 취약점 심각도만을 기준으로 자동차에 미치는 전체적인 보안 위험과 관련된 내용을 확인하는 것에는 한계가 있다. 그러나 일반적인 자동차 OEM 및 제조업체는 보안을 위한 인력 및 시간에 제한이 있기 때문에 자동차 보안에 영향을 미칠 수 있는 모든 취약점을 분석할 수 없고 이에 따라 심각도가 높은 취약점에 대한 식별 및 완화에 집중할 수밖에 없다.
심각도가 ‘중간 단계’로 평가되는 취약점은 전체 취약점에서 약 40%에 이르는 비중을 차지하지만, 심각도가 중간 단계로 평가되기 때문에 취약점 완화를 위한 패치가 적용되지 않은 상태로 자동차 컴포넌트 내에 존재하는 경우가 대부분이다. 그러나 중간 심각도라는 것이 ‘중간 위험’을 의미하는 것이 아니기 때문에, 일부 취약점에는 특정 익스플로잇(Exploit)이 존재하지 않는 일부 심각도가 높은 취약점보다 더욱 심각한 피해를 유발할 수 있다.
CVSS 점수는 취약점 평가 시 취약점 사이의 관련성 및 잠재적 영향을 고려하지 않음
특히 자동차 소프트웨어에 대한 취약점은 전체 공격 체인의 관점에서 컴포넌트 사이의 측면 이동이 가능하도록 자동차의 내부에 진입하는 역할을 한다. 대부분의 보안팀이 심각도가 높은 취약점의 식별 및 완화에 집중하고 있어 중간 심각도를 가진 취약점을 악용하는 공격의 성공률이 높기 때문에 공격자는 중간 심각도를 가진 CVE 공격을 선호한다.
앞서 언급한 것처럼 자동차 소프트웨어에는 다양한 취약점이 내재되어 있다. 자동차 소프트웨어와 관련된 컴포넌트, 소프트웨어 사이의 상관 관계를 분석할 수 있어야 자동차의 컴포넌트에 실질적인 영향을 미칠 수 있는 CVE 취약점을 식별할 수 있으며, 이를 통해 심각도 점수와 관계없이 자동차 보안에 악영향을 미칠 수 있는 CVE까지도 제거할 수 있다.
그러나 사이벨리움의 연구 결과에 따르면, 평균적으로 자동차의 컴포넌트에서 탐지된 CVE 취약점의 80% 이상에 대한 관련성 분석이 이루어지지 않아 심각한 영향을 미칠 수 있는 취약점인데도 완화되거나 제거되지 않은 것으로 나타났다.
80%이상의 CVE 취약점이 제거되지 않음
이를 통해 알 수 있듯이 소프트웨어 기능 사이의 상호 관계에 대한 인식(Context Awareness)은 취약점 관리 프로그램의 투자 수익(Return-On-Investment, ROI)을 최적화하는 동시에 전반적인 제품의 보안성을 향상시킨다.
4.2 악명 높은 공급망 취약점
표 3의 취약점 목록에서는 일부 누락된 사항이 있다. 언론에서 수차례 헤드라인을 장식한 악명 높은 취약점은 자동차 소프트웨어 취약점을 나열한 목록의 상위 10위 안에 포함되지 않았기 때문이다.
자동차 소프트웨어를 위협하는 소위 ‘악명 높은 공급망 취약점’ 중 상위 3개에 해당하는 BlueBorne, DirtyCow, Drown 취약점은 이미 4~5년 전에 발견된 취약점이지만 여전히 자동차 소프트웨어에 영향을 미치고 있다. 체계적인 사이버 보안 관행이 뒷받침되었다면 이러한 취약점은 발견되고 얼마 지나지 않아 완화할 수 있는 해결책이 제시되었어야 한다.
순위취약점 명칭발견된 년도
01
BlueBorne
2017
02
DirtyCow
2016
03
Drown
2016
04
SweynTooth
2020
05
Ripple20
2020
06
Amnesia:33
2020
07
Urgent/11
2019
08
Ghost
2015
표 3 – 자동차 취약점을 위협하는 악명 높은 취약점 순위
Ripple20, Amnesia:33, Urgent/11와 같은 취약점은 여러 공급업체에서 널리 사용되는 통신 스택(Stack)에 내재되어 있는 취약점으로 최근 들어 발견된 공급망 취약점이다.
KEY TAKEAWAYS
공개된 CVE 취약점 중 대부분은 자동차 소프트웨어에 영향을 미치지 않지만 너무 많은 소프트웨어와 취약점이 존재하기 때문에 자동차 또는 컴포넌트에 실질적인 영향을 미치는 취약점을 식별하는 것은 건초 더미에서 바늘을 찾는 것처럼 까다롭다.
기존의 보안 관행은 수동 감지 및 대응을 토대로 수행되기 때문에 깊이 있는 통찰력을 제공할 수 없다. 신속한 문제해결을 위해서는 자동화된 프로세스가 필요하다.
취약점 관리 프로그램은 제품의 컴포넌트와 소프트웨어 사이의 상관관계에 대한 인식 및 분석을 기반으로 자동차 보안에 영향을 미칠 가능성이 높은 위험을 식별할 수 있어야 한다. 실제로 대부분의 보안문제는 제품이 생산되기 전 단계인 개발 과정에서 식별 및 해결될 수 있다.
공급망 위험은 자동차 소프트웨어에 실질적인 영향을 미친다. 몇 년 전 발견된 취약점은 견고한 보안 관행을 통해 완화되었어야 하고 완화될 수 있어야 하는 것이 정상이다.
exception vector table은 여러가지 인터럽트와 예외를 처리할수 있는 주소를 모아놓은 테이블입니다.
먼저 예외와 동작모드에 관해서 보겠습니다.
arm에서의 예외는 총 7가지가 있습니다.
Data Abort :메모리의 데이터를 읽거나 데이터를 쓰려다가 실패하는 경우 발생.
FIQ, IRQ :외부 인터럽트가 코어에 전달될 때 발생.
Prefetch Abort :명령어를 해석하다가 실패하는 경우 발생.메모리에 존재하는 명령어를 읽어오다가 오류가 생기면 발생.
SWI(Software Interrupt) :프로그램 내부에서 발생시키는 인터럽트.소프트웨어 인터럽트라고 함.시스템 콜의 핵심.
Reset : ARM코어가 리셋되었을 경우 발생
Undefined Instruction :읽어온 명령어가ARM코어와 코프로세서에 정의디지 않은 명령어일 때 발생.
OS나 임베디드OS를 만들 경우엔 저 예외들은 필수로 들어간다고 생각합니다.
(현재arm아키텍쳐를 제일 많이 사용하니 보편적으로 사용하는 최소한의 예외라고 생각합시다.)
그리고ARM에는7가지exception과 연결된 일곱가지의 프로세서 동작모드가 있습니다.
Abort(ABT)
Fast Interrupt Request(FIQ)
Interrupt Request(IRQ)
Supervisor(SVC)
System(SYS)
Undefined(UND)
USER(USR)
ABT, FIQ, IRQ, SVC, UND모드는exception이 발생할 때 자동으로 변경되는 동작모드,
SYS와USR는 프로세서의 일반적인 동작 모드입니다.
예외
동작모드
Prefetch Abort
ABT
Data Abort
FIQ
FIQ
IRQ
IRQ
Reset
SVC
SWI
Undefined
Undefined
예외가 발생할 경우 해당하는동작모드로 변경을 하려면cpsr(Current Program Status Register)의0~4번 비트를 수정해 주어야 합니다.전에3장에서 보았던LED를 끄고 켤 때 관련된 레지스터의 비트를 수정하는 것과 같습니다.
<!--[endif]-->
모드
약자
특권기능
모드 비트(cpsr[4:0])
Abort
abt
yes
10111
FIQ
fiq
yes
10001
IRQ
irq
yes
10010
Supervisor
svc
yes
10011
System
sys
yes
11111
Undefined
und
yes
11011
USER
usr
no
10000
cpsr의0~4번 비트에 위의 표에서 나오는 모드 비트값을 넣으면 해당모드로 작동합니다.
근데 자세히보면 모드 비트의 자리수는0~4번까지5개의 비트를 사용합니다.실제로 사용하는 모드는 총7개뿐인데 말이죠.
방금 보았던Prefetch Abort예외와Data Abort예외가Abort동작모드에서 처리가 되도록 설정되었지만,
동작모드를 새로 하나 만들고Prefetch Abort와Data Abort를 각각 처리를 할수도 있다는 것을 유추해볼수 있습니다.
(2^5승이니32개.총32개까지 모드를 만들 수 있겠죠.)
책에서는 리눅스에서의 동작모드에 대해 엄청 잘 설명해놨습니다.
“리눅스에서는 일반적으로 사용자 프로그램은 전부 다USER모드에서 작동한다.그러다가 프로그램 안에서 시스템 콜을 호출하면 프로그램은SWI exception을 발생시키고, ARM코어가 프로세서의 동작 모드를SVC모드로 변경시켜Software Interrupt를 처리한 후에 다시USER모드로 복귀한다.마찬가지로 키보드 입력같은 경우는 대부분의 운영체제에서IRQ로 처리한다.우리가 키보드를 누르면 키보드 케이블을 통해 메인보드에 신호가 전달되고,메인보드에 있는 여러 회로를 거쳐ARM코어에IRQ exception이 발생한다.그러면ARM코어는 프로세서 동작 모드를IRQ모드로 변경하고IRQ관련 처리를 한 다음USER모드로 복귀한다.”
근데 리눅스를 잘 사용하지 않아 조금 거부감이 있는 사람들을 위해 윈도우 측면에서 설명해 보겠습니다.
(왠만하면 위에껄로 이해하세요.제가 설명하는게 정확한지 모릅니다.)
“윈도우에서는 일반적으로 사용자 프로그램은 각각 생성된 윈도우 계정에서 작동한다.[USER모드에서 작동]그렇게 프로그램에서 작업을 하던 중,작업하던 프로그램이 멈춰버렸다.응답이 없는 프로그램을 처리하기 위해서 우측 상단의X표를 누른다.[SWI exception을 발생시킨다.]그리고 예외를 처리하기 위해서 프로세서의 모드를 프로그램을 종료시킬수 있는 모드로 변경한다.[SVC모드로 변경]마지막으로 응답없는 프로그램을 종료 시키고[Software Interrupt처리]다시 프로그램이 켜지기 전의 상태로 돌아간다.[USER모드 복귀]
이제 예외를 처리하는 방법을 봅시다.
exception을ARM에서 처리하는 순서.
1. exception이 발생함.
2. exception모드의spsr에cpsr을 저장함.
3. exception모드의lr에pc값을 저장함.
4. cpsr의 모드 비트를 변경하여,해당exception에 대응하는 프로세서 동작 모드로 진입함.
5. pc에exception핸들러의 주소를 저장하여 해당exception에서 해야 할 일을 처리함.
spsr(Saved Program Status Register) :각 동작모드에 존재하며, exception이 발생하여cpsr을 변경해야 할 때 이전 모드의cpsr을spsr에 백업한다.
링크레지스터(lr) : exception의 처리후 복귀하기 위한pc의 주소를 저장.
4번째에 보면 모드비트를 변경하고 나서,대응하는 프로세서 동작 모드로 진입한다고 되어있습니다.
각 동작모드가 있는 주소를 모아 놓은 것이exception vector table입니다.
데이터 영역에서 코드가 실행되는 것을 방지하는 기법으로스택이나 힙에서 실행 권한을 없애 쉘 코드 실행을 막아주는 기법이다. 윈도우에서는 DEP라고 부르고 리눅스에서는 NX bit라고 불러서 결국 둘 다 동일한 말
NX 비활성화 옵션
gcc -z execstack
3. Stack Canary
함수 진입 시 스택에 SFP와 return address값을 저장할 때,이 값을 공격자로부터 덮어씌워지는 것을 보호하기 위해 스택 상의 변수들의 공간과 SFP사이에 특정한 값을 추가하는데 이 값을 Canary라고 부른다.함수가 종료할 시점에 Canary값의 변조 유무로 bof를 탐지할 수 있으며 변조 시 프로그램이 종료된다.보통 SFP앞에 카나리 있음.
Canary 종류
Terminator Canary: NULL(0x00), CR(0x0d), LF(0x0a), EOF(0xff)와 같은 Terminator 문자를 포함시키는 Canary로 종료 문자들 때문에 Canary값을 알고 있어도 똑같이 작성하여 공격이 불가능
Random Canary: Canary값이 랜덤으로 계속해서 생성하는 방법
Radom XOR Canary: Canary값을 모든 제어 데이터 또는 일부를 사용해 XOR-scramble하여 생성
GOT Overwrite와 같은 공격에 대비해 ELF 바이너리 또는 프로세스의 데이터 섹션을 보호하는 기법이다.바이너리 컴파일 시 Full-RELRO 옵션을 주면 .ctors, .dtors, .jcr, .dynamic, .got섹션이 Read-Only가 됨 →GOT Overwrite 불가능
Lazy Binding(Lazy Linking, on-demand symbol resolution)
모든 함수의 주소를 한 번에 로딩하지 않고함수를 처음 호출한 시점에 공유 라이브러리에서 해당 함수의 주소를 알아오는 것을 Lazy Binding이라고 한다.
Now Binding
프로그램이 실행될 때 해당 프로그램에서 사용하는 모든 함수들의 주소를 읽어와 got영역에 저장
추가 설명)
Dynamic Linking 방식으로 컴파일된 바이너리에서 라이브러리 함수를 호출할 때 실제 함수의 주소를 모르기 때문에 동적으로 알아오기 위해 plt, got를 이용한다. 처음 함수를 호출할 때는 plt영역의 got를 참조하고 뭐 여러가지 과정을 거치고 dl_runtime_resolve()로 가서 dl_fixup()에서 드디어 실제 함수의 주소를 got에 넣어준다. 이후에 다시 함수를 호출할 때는 위와 같은 복잡한 과정을 거치지 않고 걍 got에 있는 함수를 호출한다.
[No-RELRO]
[Partial-RELRO]
[Full-RELRO]
추가 설명)
Full RELRO를 사용하면 GOT가 Read-Only인 상태여서 Partial RELRO보다 보안상 더 안전할 것 같은데 Full RELRO보다 Partial RELRO가 더 널리 사용되는 이유는Full RELRO의 경우 프로세스가 시작될 때 링커에 의해 모든 메모리에 대해 재배치 작업이 일어나 실행이 느려지기 때문이다.
5. PIE(Position Independent Executable)
PIE는 위치 독립 코드로 이루어진 실행 가능한 바이너리이며 바이너리 주소가 상대적인 주소로 랜덤하게 매핑시키는 기법이다. 모든 심볼을 상대주소로 작성하므로 Base Address가 달라지게 함으로써 모든 심볼 주소가 실행할 때마다 달라져 ASLR과 같은 효과를 가질 수 있다.(Base Address + Relative offset, 참고로 Base Address는 매번 변경되지만 offset은 동일)
참고로 PIE는 OS의 ASLR기능에 의존하므로 OS의 ASLR이 dsiable되어 잇으면 randomize 불가하며 더 구체적으로는 OS loader의 영향을 받는다.
PIE 활성화 및 비활성화 옵션
[비활성화]
gcc -no-pie
[활성화]
gcc -fPIE -pie
6. ASCII-Armor
RTL공격에 대응하기 위한 방법으로 공유 라이브러리 영역의 상위 주소에 0x00을 포함시킨다. ASCII-Armor가 적용되면 라이브러리를 공유 라이브러리 영역에 할당하지 않고 텍스트 영역의 16MB아래의 주소에 할당된다. 따라서 라이브러리 영역의 주소 최상위 1byte가 NULL로 인식된다. bof공격을 위해 string관련 함수(strcpy, strcat, ...)를 사용하게 되면 문자열을 읽다가 NULL값이 나오면 중지되므로 라이브러리 함수를 호출하는 그 때 최상위 1byte가 NULL값이므로 동작이 끝나 버린다.
ISM이란 산업, 과학, 의료용으로 할당된 주파수 대역으로, 아마추어 무선, 2.4GHz 무선랜, 블루투스가 이 ISM 대역을 사용한다.
✓ 여러 시스템과 같은 주파수 대역을 이용하기 때문에 시스템 간 전파 간섭이 생길 우려가 있는데, 이를 예방하기 위해 블루투스는주파수 호핑(Frequency Hopping)방식을 취한다. 주파수 호핑이란 많은 수의 채널을 특정 패턴에 따라 빠르게 이동하며 패킷(데이터)을 조금씩 전송하는 기법이다. 블루투스는 할당된 79개 채널을 1초당 1600번 호핑한다.
✓ 이 호핑 패턴이 블루투스 기기 간에동기화되어야 통신이 이루어진다.
블루투스는 기기 간마스터(Master)와슬레이브(slave)구성으로 연결되는데, 마스터 기기가 생성하는 주파수 호핑에 슬레이브 기기를 동기화시키지 못하면 두 기기 간 통신이 이루어지지 않는다. 이로 인해 다른 시스템의 전파 간섭을 피해 안정적으로 연결될 수 있게 된다. 참고로 하나의 마스터 기기에는 최대 7대의 슬레이브 기기를 연결할 수 있다.