# Ruroco - "RUn RemOte Command" UDP를 이용한 원격 명령 호출

> Clean Markdown view of GeekNews topic #16482. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16482](https://news.hada.io/topic?id=16482)
- GeekNews Markdown: [https://news.hada.io/topic/16482.md](https://news.hada.io/topic/16482.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-08-27T09:55:01+09:00
- Updated: 2024-08-27T09:55:01+09:00
- Original source: [github.com/beac0n](https://github.com/beac0n/ruroco)
- Points: 10
- Comments: 0

## Summary

Ruroco는 UDP 패킷을 통해 서버에 명령을 실행하는 도구로, 클라이언트는 명령을 정의하지 않고 서버에 저장된 명령을 선택하여 실행할 수 있습니다. RSA 암호화를 사용하여 보안을 강화하고, 서버는 포트 스캐닝을 방지하며, replay 공격을 차단하는 기능을 갖추고 있습니다. 또한, SSH 포트를 필요할 때만 열고 닫는 방식으로 서버 보안을 유지할 수 있습니다.

## Topic Body

- 서버에 UDP 패킷을 보내서 명령을 실행하는 도구   
- 명령은 서버 측에서 구성되므로 클라이언트는 실행할 명령을 정의하지 않고 기존 명령 중에서 선택만 함   
- 3개의 바이너리로 구성   
  - client: 컴퓨터에서 실행되어 UDP 패킷을 전송  
  - server: UDP 패킷을 수신하고 유효한지 확인  
  - commander: UDP 패킷의 데이터로 인코딩된 명령이 유효한 경우 실행  
- 보안   
  - UDP로 보내지기 때문에 서버는 전혀 응답하지 않음 : 포트 스캐닝 불가   
  - 클라이언트에서 서버로 전송되는 데이터는 RSA를 사용하여 암호화  
  - 클라이언트는 실행할 명령만 정의하고 명령은 서버에 저장 -> 클라이언트는 명령을 선택할 수는 있지만 정의할 수는 없음  
  - 가능한 한 적은 운영 체제 권한을 사용하도록 서버 소프트웨어를 실행  
  - 서버가 수신한 모든 패킷을 차단 목록에 추가하여 replay에서 보호  
  - (WIP) DoS 보호  
### 사용 예 : **single packet authorization (SPA)**  
서버의 보안을 위해서 SSH를 완전히 차단하는 대신, SSH포트를 짧게 열었다 다시 닫는 방식을 도입 가능   
```  
address = "0.0.0.0:8080"  # Ruroco 서버가 수신 대기하는 주소 (systemd/ruroco.socket 사용하지 않는 경우)  
config_dir = "/etc/ruroco/"  # 설정 파일이 저장되는 경로  
  
[commands]  
# SSH 열기 (요청이 온 IP 주소에 대해서만)  
open_ssh = "ufw allow from $RUROCO_IP proto tcp to any port 22"   
# SSH 닫기 (요청이 온 IP 주소에 대해서만)  
close_ssh = "ufw delete allow from $RUROCO_IP proto tcp to any port 22"  
```  
- 서버에서 이렇게 Ruroco를 구성하고 클라이언트 측에서 다음 명령을 실행  
`ruroco-client send --address host.domain:8080 --private-pem-path /path/to/ruroco_private.pem --command open_ssh --deadline 5`  
- 서버는 RSA를 사용하여 클라이언트가 해당 명령을 실행할 수 있는 권한이 있는지 확인하고 "open_ssh" 아래에 정의된 명령을 실행  
- `--deadline` 인수는 명령 실행 후 5초 이내에 서버에서 명령을 시작해야 함을 의미  
- SSH 포트에 대한 액세스를 UDP 패킷이 전송된 IP에 대해서만 허용  
- 물론 SSH 포트가 인터넷에 노출되는 경우와 마찬가지로 다른 모든 보안 강화 작업도 수행해야 함  
- 설정 파일에 더 많은 명령을 추가하여 원하는 수의 명령을 정의할 수 있음

## Comments



_No public comments on this page._
