Verificando e corrigindo problemas de segurança no Orange Pi 5

Ricardo Baltazar
Juntos Somos Mais
Published in
8 min readJan 26, 2023
Photo by Markus Spiske on Unsplash

Eu uso o sistema operacional do Ubunto Desktop. Eu explico o porque nesse posto onde detalho minha primeira experiencia com ele.

Depois de uma primeira configuração e tento já o Umbrel rodando eu parei para dar uma olhada no SO para ver o que temos.

Veja bem, eu não sou nenhum profissional de segurança e meu conhecimento na área é muito pequeno, por isso tome esse texto apenas como um guia inicial para projetos pessoais, se quiser segurança profissional procure um profissional. Eu vou Back End, sou bom em abrir brechas de segurança, não de fecha-las. :D

No final, eu não fiz praticamente nada, esto postando aqui para manter um ristro inclusive do que eu não fiz. Caso você veja alguma coisa errada, por favor, me avise.

Primeiro eu peguei meu IP publico e tentei rodar um ssh nele, conectado no ssh dele:

>curl ifconfig.me
111.111.111.11

Depois em qualquer computador:

>ssh 111.111.111.11                                                                                                                                   ricardochaves@Ricardos-MacBook-Pro
ssh: connect to host 111.111.111.11 port 22: Connection refused

Aqui eu já fiquei mais tranquilo porque não tinha mudado a senha do ssh ainda.

Agora eu queria alguma ferramenta que me ajudasse a verificar possíveis vulnerabilidades existentes na minha configuração de Linux. Procurando no Google eu achei algumas e comecei pela Lynis.

Para inslar e rodar é apenas isso:

git clone https://github.com/CISOfy/lynis
cd lynis
./lynis audit system

Ao final do estenso relatório ele me deu 47 Suggestions :

  * This release is more than 4 months old. Check the website or GitHub to see if there is an update available. [LYNIS]
https://cisofy.com/lynis/controls/LYNIS/

Essa eu não tenho o que fazer. Estou com a versão mais nova.

  * Consider hardening system services [BOOT-5264]
- Details : Run '/usr/bin/systemd-analyze security SERVICE' for each service
https://cisofy.com/lynis/controls/BOOT-5264/

Quando eu fiz com o Docker ele ficou todo vermelho… São muitos serviços e eu vou precisar de tempo para fazer um a um… Se é que eu vou fazer.

  * Determine why /vmlinuz or /boot/vmlinuz is missing on this Debian/Ubuntu system. [KRNL-5788]
- Details : /vmlinuz or /boot/vmlinuz
https://cisofy.com/lynis/controls/KRNL-5788/

Esse eu não entendi… eu tenho o arquivo /boot/vmlinuz-**** , não sei porque ele quesitonou isso, proximo:

  * If not required, consider explicit disabling of core dump in /etc/security/limits.conf file [KRNL-5820]
https://cisofy.com/lynis/controls/KRNL-5820/

Aqui eu editei o arquivo /etc/sysctl.conf e adicionei fs.suid_dumpable = 0 no final do arquivo. Depois fiz um reload do sysctl com o comando sudo sysctl -p .

  * Check process listing for processes waiting for IO requests [PROC-3614]
https://cisofy.com/lynis/controls/PROC-3614/

Realmente eu estou usando muito o disco e vou deixar isso para ver depois que reduzir o uso.

  * Install a PAM module for password strength testing like pam_cracklib or pam_passwdqc [AUTH-9262]
https://cisofy.com/lynis/controls/AUTH-9262/

Aqui é instalar o cracklib e editar o arquivo /etc/pam.d/common-password

sudo apt-get install -y libpam-cracklib
sudo nano /etc/pam.d/common-password

Ache a primeira linha e altere pela segunda:

password        requisite                       pam_cracklib.so retry=3 minlen=8 difok=3
password requisite pam_cracklib.so retry=3 minlen=16 difok=3 ucredit=-1 lcredit=-2 dcredit=-2 ocredit=-2

Proximo:

  * When possible set expire dates for all password protected accounts [AUTH-9282]
https://cisofy.com/lynis/controls/AUTH-9282/

Eu no nomento não vou configurar nada para expirar, se começar com isso logo vou estar fazendo rotação de chave e tudo mais, avançado de mais para mim.

  * Configure minimum password age in /etc/login.defs [AUTH-9286]
https://cisofy.com/lynis/controls/AUTH-9286/

Novamente tem a ver com tempo do password, não quero mudar nada disso.

  * Configure maximum password age in /etc/login.defs [AUTH-9286]
https://cisofy.com/lynis/controls/AUTH-9286/

Mesmo do de cima…

  * Default umask in /etc/login.defs could be more strict like 027 [AUTH-9328]
https://cisofy.com/lynis/controls/AUTH-9328/

Esse cara é mais problema quando você tem vários usuários, no meu caso, sou apenas eu e tudo bem que a permissão de acesso ao que eu criar fique no padrão mesmo.

  * To decrease the impact of a full /home file system, place /home on a separate partition [FILE-6310]
https://cisofy.com/lynis/controls/FILE-6310/

Pelo que entendi esse cara também seria problema se tivesse mais gente usando meu linux. O que não é o meu caso também.

  * To decrease the impact of a full /var file system, place /var on a separate partition [FILE-6310]
https://cisofy.com/lynis/controls/FILE-6310/

Mesmo caso do de cima, só que com outro diretório.

  * Disable drivers like USB storage when not used, to prevent unauthorized storage or data theft [USB-1000]
https://cisofy.com/lynis/controls/USB-1000/

Esse é um falso positivo, eu preciso do USB ligado direto. Expliquei no post anterior linkado no inicio do artigo.

  * Check DNS configuration for the dns domain name [NAME-4028]
https://cisofy.com/lynis/controls/NAME-4028/

Esse eu não entendi… A documentação deles é bem ruim na vdd…

  * Split resolving between localhost and the hostname of the system [NAME-4406]
https://cisofy.com/lynis/controls/NAME-4406/

Esse eu quero que realmente tenha esse comportamento, não vou alterar.

  * Install debsums utility for the verification of packages with known good database. [PKGS-7370]
https://cisofy.com/lynis/controls/PKGS-7370/

Instalei o debsums executei debsums | grep FAILED e tive esse resultado, depois vou analisar caso a caso. Mas fica para um post futuro.

/usr/bin/rkaiq_3A_server                                                  FAILED
debsums: missing file /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf (from network-manager package)
debsums: missing file /etc/default/orangepi-motd.dpkg-dist (from orangepi-bsp-cli-orangepi5 package)
debsums: missing file /etc/default/orangepi-ramlog.dpkg-dist (from orangepi-bsp-cli-orangepi5 package)
debsums: missing file /etc/default/orangepi-zram-config.dpkg-dist (from orangepi-bsp-cli-orangepi5 package)
debsums: missing file /etc/profile.d/orangepi-ssh-title.sh (from orangepi-bsp-cli-orangepi5 package)
/etc/orangepi-release FAILED
/etc/skel/.config/htop/htoprc FAILED
/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml FAILED
  * Install package apt-show-versions for patch management purposes [PKGS-7394]
https://cisofy.com/lynis/controls/PKGS-7394/

Esse eu até instalei o pacote para brincar, mas nem sei se vou lembrar de usa constantemete: sudo apt-get install apt-show-versions . Da uma olhada na doc deles para entender o que ele faz e usa aí que é legal.

  * Determine if protocol 'dccp' is really needed on this system [NETW-3200]
https://cisofy.com/lynis/controls/NETW-3200/

Agora começou a ficar complicado de verdade… Eu comecei a conversar com o ChatGPT para entender o que é o protocolo e como verificar se ele está sendo usado ou não. Cheguei a seguinte conclusão, digite os dois comandos abaixo e verifique se ele está em uso:

netstat -an | grep dccp
ss -p | grep dccp

Como não teve nada de resposta estou assumindo que ele não está em uso e vou executar o comando para adiciona-lo ao blacklist e depois reiniciar o Orange Pi:

sudo echo "blacklist dccp" >> /etc/modprobe.d/blacklist.conf
  * Determine if protocol 'sctp' is really needed on this system [NETW-3200]
https://cisofy.com/lynis/controls/NETW-3200/

Igual ao de cima, muda apenas o nome do protocolo, resolvei desabilitar também

  * Determine if protocol 'rds' is really needed on this system [NETW-3200]
https://cisofy.com/lynis/controls/NETW-3200/

Também desabilitado como os outros.

  * Determine if protocol 'tipc' is really needed on this system [NETW-3200]
https://cisofy.com/lynis/controls/NETW-3200/

Desabilitado.

  * Access to CUPS configuration could be more strict. [PRNT-2307]
https://cisofy.com/lynis/controls/PRNT-2307/

Eu não tenho impressora, por isso nem pensei muito e já restringi o acesso:

sudo chown root:lpadmin /etc/cups/cupsd.conf
sudo chmod 640 /etc/cups/cupsd.conf
  * Check iptables rules to see which rules are currently not used [FIRE-4513]
https://cisofy.com/lynis/controls/FIRE-4513/

Esse eu não tenho capacidade de ver… Vou precisar estudar mais para verificar o que realmente está em uso ou não.


* Consider hardening SSH configuration [SSH-7408]
- Details : AllowTcpForwarding (set YES to NO)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : ClientAliveCountMax (set 3 to 2)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : LogLevel (set INFO to VERBOSE)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : MaxAuthTries (set 6 to 3)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : MaxSessions (set 10 to 2)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : PermitRootLogin (set YES to (FORCED-COMMANDS-ONLY|NO|PROHIBIT-PASSWORD|WITHOUT-PASSWORD))
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : Port (set 22 to )
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : TCPKeepAlive (set YES to NO)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : X11Forwarding (set YES to NO)
https://cisofy.com/lynis/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : AllowAgentForwarding (set YES to NO)
https://cisofy.com/lynis/controls/SSH-7408/

Aqui ele fala para forçar a barra na configuração do SSH, eu não vou fazer isso agora, uso muito e coisas como manter a conexão aberta são uteis para mim.

  * Enable logging to an external logging host for archiving purposes and additional protection [LOGG-2154]
https://cisofy.com/lynis/controls/LOGG-2154/

Não vou mandar meus logs para outro lugar, para meu cenário é um overkill.

  * Check what deleted files are still in use and why. [LOGG-2190]
https://cisofy.com/lynis/controls/LOGG-2190/

O arquivo mais antigo na minha pasta /tmp tinha 3 dias, sei lá se fiz alguma coisa errada, mas acredito que estou bem nesse ponto.

  * Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
https://cisofy.com/lynis/controls/BANN-7130/

Esse eu achei bem legal. Editei o arquivo /etc/issue.net e coloquei esse texto:

Go away
This is your last warning
If you try again you will get cancer.
  * Enable process accounting [ACCT-9622]
https://cisofy.com/lynis/controls/ACCT-9622/

Não entendi o que fazer com esse…

  * Enable sysstat to collect accounting (disabled) [ACCT-9626]
https://cisofy.com/lynis/controls/ACCT-9626/

Vou deixar para instalar as ferramentas sugeridas e estudar uma a uma futuramente.

  * Enable auditd to collect audit information [ACCT-9628]
https://cisofy.com/lynis/controls/ACCT-9628/

Instalei oauditd e usei o comando aureport aparece um report legal. Fica a nota para estudar melhor o report

  * Check output of aa-status [MACF-6208]
- Details : /sys/kernel/security/apparmor/profiles
- Solution : Run aa-status
https://cisofy.com/lynis/controls/MACF-6208/

Primeiro eu verifiquei o statudo do serviço dessa forma com esse resultado:

>sudo systemctl status apparmor
○ apparmor.service - Load AppArmor profiles
Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Mon 2023-01-16 21:11:08 -03; 3 days ago
Docs: man:apparmor(7)
https://gitlab.com/apparmor/apparmor/wikis/home/

Tentei um start e continuou igual, depois reinstalei e nada… Fiz de tudo, nada funcionou… Vou deixar para ver isso depois.

  * Install a file integrity tool to monitor changes to critical and sensitive files [FINT-4350]
https://cisofy.com/lynis/controls/FINT-4350/

Esse aqui pede para instalar outro sistema de segurança, eu vou ver isso depois também.

  * Determine if automation tools are present for system management [TOOL-5002]
https://cisofy.com/lynis/controls/TOOL-5002/

Ele ta pedindo para instalar ferramentas de automação, não tenho interesse nisso

  * Consider restricting file permissions [FILE-7524]
- Details : See screen output or log file
- Solution : Use chmod to change file permissions
https://cisofy.com/lynis/controls/FILE-7524/

Totalmente vago isso aqui… não entendi o que preciso fazer exatamente.

  * One or more sysctl values differ from the scan profile and could be tweaked [KRNL-6000]
- Solution : Change sysctl value or disable test (skip-test=KRNL-6000:<sysctl-key>)
https://cisofy.com/lynis/controls/KRNL-6000/

Também não entendi esse. No meu caso eu vou deixar tudo como está.

  * Harden compilers like restricting access to root user only [HRDN-7222]
https://cisofy.com/lynis/controls/HRDN-7222/

Esse é legal, ele fala para remover os compiladores ou registringir o acesso. Eu não vou remover, mas vou estudar para restrigir o acesso, só não vou fazer no meu Orange Pi agora para evitar que eu estrague alguma coisa, isso é novo pra mim.

  * Harden the system by installing at least one malware scanner, to perform periodic file system scans [HRDN-7230]
- Solution : Install a tool like rkhunter, chkrootkit, OSSEC
https://cisofy.com/lynis/controls/HRDN-7230/

Por ultimo ele pede para instalar uma ferramenta de malware scanner, o que faz sentido pra mim. Vou fazer.

Resultado

Aprendi muito lendo sobre cada item e vou deixar esse post como nota para executar o que ficou faltando.

Sugiro você fazer o mesmo para entender melhor como o sistema funciona.

Vou tentar executar isso constantemente.

--

--