Parte I: Avaliação de Riscos

Olá, este post faz parte de uma sequência de artigos sobre segurança da informação, resolvi fazê-los tanto para ajudar os interessados no tema como para fixar alguns pontos na minha cabeça, além é claro, de poder deixar como consulta em algum lugar no blog. Antes de mais nada, eu não sou o dono da verdade, então muita coisa escrita aqui pode ser feita de formas diferentes para se atingir objetivos diferentes, aqui eu mostro coisas que eu aplico no meu dia ou que já apliquei em empresas anteriores;

Conheces teu inimigo e conhece-te a ti mesmo; se tiveres cem combates a travar, cem vezes serás vitorioso. Se ignoras teu inimigo e conheces a ti mesmo, tuas chances de perder e de ganhar serão idênticas. Se ignoras ao mesmo tempo teu inimigo e a ti mesmo, só contarás teus combates por tuas derrotas. – Sun Tzu.

O nosso primeiro tema será avaliação e gerenciamento de riscos, um tema base para a disciplina de segurança da informação; Você pode estar lendo sobre isso pela primeira vez mas saiba que as grandes empresas do Brasil e do mundo utilizam esta prática já há bastante tempo; com base nesse contexto veremos como classificar o risco, para isso a primeira coisa que devemos definir é o significado do risco.

Um dos padrões e documentos mais referenciados e utilizados em segurança da informação e principalmente nesta disciplina de avaliação de riscos é o NIST 800-30 [1] que é considerado um MUST READ.

Então, o que é risco?

Risco, em segurança da informação, se trata de toda a ameaça em que uma organização esteja ou possa estar envolvida, todo o evento que se concretizado cause problemas ao negócio, imagem ou funcionamento da empresa; Como analista de segurança da informação um dos principais trabalhos que você tem que desenvolver é identificar que ameaças podem atingir uma organização e quais medidas você deve tomar em caso de acontecimento de um evento.

O risco pode ser divido entre muitas formas:

  • Físicos: Servidores expostos fisicamente para funcionários,
  • Lógicos: Uma porta aberta em um servidor, uma rede mal segmentada,
  • Naturais: Enchente, furacão, raios,
  • Imprevisíveis: No-break quebrado, queda de energia municipal;

Enfim, quase qualquer coisa que afete o funcionamento do seu negócio; acho que este é o ponto principal, para que sua empresa dê lucro ou desempenhe sua atividade de forma eficiente ela deve se livrar dos riscos.


Implementação

Segundo Vaughan [2], os passos que devem ser seguidos para que possa existir um bom plano para avaliação e gerenciamento de riscos são:

  1. Determinar quais os principais objetivos a se atingir;
  2. Identificar os riscos aos quais a organização está exposta;
  3. Avaliar estes riscos de forma criteriosa;
  4. Considerar as alternativas e selecionar dispositivos para o tratamento dos riscos;
  5. Implementar as decisões tomadas;
  6. Avaliar e revisar o processo continuamente;

Identificar quais os riscos que a sua organização está exposta não é uma tarefa fácil, exige disciplina e discernimento mas também muitas horas de conversas com os principais envolvidos no funcionamento da empresa, isso quase sempre (note o quase) é feito conversando com os gerentes das áreas da empresa;

Dica do Mulato #01
- Marque reuniões com todos os gerentes da empresa;
- Peça para que na opinião deles informem o que deve ser protegido;
- Aceite informações de outras áreas mas peça que se concentrem nas suas;

E principalmente, você deve estar atento aos riscos que envolvem o modelo de negócio da empresa e os riscos envolvidos com sua infra-estrutura de negócio.

Dica do Mulato #02
- Estude o segmento da empresa;
- Conheça seus concorrentes e procure entender os riscos do negócio;
- Procure conhecer o máximo possível a infra estrutura da empresa;

Classificação do Risco

Uma das formas mais eficientes e recomendadas para se avaliar os riscos depois de listá-los é fornecer os pesos corretos para cada risco em forma de severidade (impacto que o evento causará na empresa caso aconteça) e a probabilidade de o evento  acontecer, neste caso faremos isso desta forma:

Severidade (para o negócio) Chance/Probabilidade de acontecer
  • 1-2: Pouquíssima severidade;
  • 3-4: Impacto baixo para empresa;
  • 5-6: Impacto moderado;
  • 7-8: Sérios problemas caso ocorra;
  • 9-10: Desastroso para empresa;
  • 2: Risco baixo;
  • 5: Risco médio;
  • 10: Risco alto;

Para calcular o risco geral simplesmente multiplicamos os dois valores:

  -> Risco Geral = Severidade X Probabilidade/Chance

E é gerado um valor quantitativo até 100 informando o risco geral do evento. Esta é a tabela que utilizo mas você pode modificar para qualquer outro tipo de qualificação: quantitativa ou qualitativa, desde que no final os riscos sejam expostos e as decisões possam ser tomadas de forma mais eficiente e com foco na sua importância e ocorrência;


A partir deste momento já é possível preparar a nossa primeira tabela de apoio a decisões! Para servir de exemplo, suponha que a empresa que estamos analisando é uma startup de desenvolvimento web com escritório físico onde trabalham 5 funcionários e existem 2 servidores DELL onde um é ativo e o outro fica de contingência com poucos serviços, a empresa fica localizada dentro de uma casa em um bairro bem seguro mas onde já houve antes registros de enchentes em sua área, e toda sua infra-estrutura esta localizada fisicamente na casa, no entanto eles possuem uma cópia de backups diários e assets importantes da empresa em um servidor dedicado na internet;

Digamos que após conversar com o dono da empresa e o responsável técnico da equipe de funcionários eles levantaram pra gente que os principais riscos que eles consideram são:

  • “Não temos muita orientação em segurança no processo de desenvolvimento”,
  • “As vezes recebemos clientes que acessam a rede privada da empresa”,
  • “Não temos uma política muito bem definida de backup, mandamos pra nuvem”,
  • “As vezes temos queda de energia municipal e duramos pouco tempo sem energia”,
  • “Não temos fornecedores de confiança, não temos segurança física”

Após uma análise inicial decidimos identificar os 10 principais riscos:

Risco / Descrição Chance Impacto Risco Geral
Enchente que pode danificar equipamentos Baixa 7 14
Invasão ao local físico, furto Baixa 8 16
Ausência de Suporte/Fornecedor de Equipamentos de Hardware (Servidor, Máquinas, Equip. de Rede) * Média 5 25
Acesso indevido a rede privada empresa * Média 6 30
Invasão Local (Física) ao Servidor da Empresa (Cliente / Funcionário mal intencionado / Estranho) * Média 7 35
Problemas/Perda de Backups da Empresa Média 8 40
Queda de energia municipal/ausência de no-break Média 8 40
Ausência de treinamento e medidas de segurança voltadas ao desenvolvimento WEB Média 9 45
Ataques a páginas hospedadas no servidor (CSRF, SQL/Param Injection, Session Hijacking, etc) Alta 7 70
Invasão ao servidor principal com acesso administrativo Alta 9 90

Veremos que essa tabela irá crescer no próximo artigo quando falarmos em como gerenciar estes riscos e como aplicar os controles adequados, ira notar-se também que alguns itens irão receber resposta imediata afim de reduzir a sua chance ou o seu impacto (*);


Cálculo do Risco

Um dos conceitos mais importantes que um analista de segurança da informação deve compreender e difundir entre os principais interessados é o cálculo do risco, para isso foram definidos três variáveis que te ajudam a chegar ao custo do risco para uma empresa, são elas:

  • ARO (Annualized Rate of Ocurrence/Possibilidade de Ocorrência no Ano), percentagem da possibilidade ocorrência do evento em um ano;
  • ALE (Annual Loss Expectancy/Expectativa de Perda Anual), expectativa de perda anual em valores monetários de um evento/risco específico;
  • SLE (Single Loss Expectancy/Expecativa de Perda Única), valores em moeda que representam o custo total caso um evento aconteça; Este valor pode ser subdivido entre dois itens:
    • AV (Asset Value/Valor do Ativo)
    • EF (Exposure Factor/Fator de Exposição)

O que nos leva as seguintes fórmulas:

  ->  AV x EF  = SLE
  -> SLE x ARO = ALE

Exemplo #01:

Suponha que a página que mais dá dinheiro a essa empresa rende foi avaliada em R$ 26.000,00 e após a reunião em conjunto com os envolvidos foi descoberto que o site já passou por um processo de auditoria de segurança e que está bem padronizado há alguns anos, então foi definido um fato de exposição (EF) de 25%, então nosso SLE aqui é R$ 26.000,00 x 0.25 = R$ 6.500,00

Exemplo #02:

Digamos que o servidor físico que hospeda as páginas web rende por hora R$ 200,00 em horários de pico a empresa, a probabilidade de acontecer  uma falha no hardware neste ano é de 20% ou 1 em 5, caso ocorra a falha será necessário a compra de mais um equipamento de contingência no valor de R$ 6.000, mais o tempo de manutenção necessário para voltar ao ar sem problemas, que da ultima vez foi estimado em 4 horas;

Neste exemplo o ARO é 0.20 e o SLE é R$ 6.800,00 (R$ 200 x 4 horas + R$6.000 servidor), então usando a fórmula acima qual é o ALE (Expectativa de Perda Anual)?  O ALE é R$ 1.360,00.


Então, é isso! Nós vimos aqui a primeira parte do post Avaliação e Gerenciamento de Riscos, com o conhecimento daqui: classificação e cálculo do risco, conseguiremos a informação necessária para gerenciar os riscos afim de mitigá-los ou extinguí-los quando possível, de forma organizada e orientada a um processo;

Referências

[1] NIST 800-30 – Risk Management Guide for Information Technology Systems
[2] Fundamentals of Risk and Insurance, Vaughan and Vaughan

This is a personal blog, the opinions expressed here are my own, and do not necessarily reflect those of my employer. Este é um blog pessoal e por isso o que é escrito aqui, pode não refletir as idéias das empresas em que eu trabalho e nem dos parceiros com quem eu faço negócios. Bem vindo e espero que aproveite algo. Be welcome and I hoje you enjoy 🙂

Last #10

Unfortunately we all know that we can’t put everything what we are working in, on a simple blog, I have to understand this since years ago when I worked at some government department. But I can show what I am doing now just for fun and for registry to me in the future.

we were had some problems here, especially when we’d need to try validate a lot of forms that involved things like UITextField, UISegmentedControl, etc. To solve this issue I had to create one class with methods like:

.insert(object, checkType, labelError, errorMessage) // magic goes here.
.showErrors() // print on screen all erros like below
.count() // return the quantity of erros below
.result() // return if all tests are passed or no.

and the code is easily readable:

@IBAction func onActAll(sender: AnyObject)
{
    if ruleThis.result() == false {
        ruleThis.showErrors()
    } else {
        print("Do your segueway or something after success.")
    }
}

(You set a trigger for validation, here a button to Next Screen)

Then you assign function pointers to the stack os Validations.

override func viewDidLoad() {
    super.viewDidLoad()

    ruleThis.insert(object: textFieldCPF,
        function: checkIfCPFisValid, errorLabel: labelMessageCPF,
        errorMessage: "CPF inválido, sua mensagem personalizada aqui.")

    ruleThis.insert(object: textFieldPassword, 
        function: checkIfPasswordIsValid, errorLabel: labelMessagePassword,
        errorMessage: "Sua senha não preenche os resquisitos mínimos de segurança, tente novamente")

    ruleThis.insert(object: textFieldInputCEP, 
        function: checkIfCEPisValid, errorLabel: labelMessageCEP, 
        errorMessage: "Este CEP não é válido")

    ruleThis.insert(object: segmentedOption,
        function: checkIfIsSelected, errorLabel: labelMessageSegmented,
        errorMessage: "Por favor selecione uma das opções.")
}

Then you make a function validation to the object assigned. This coule be simple as

func checkIfTextIsBlank(obj: AnyObject?) -> Bool
{
    var result = false
    
    if let object = obj as? UITextField {
        if !object.text!.isEmpty { // if is not nil.
            result = true
        }
    }

    return result
}

or a little more complex like this (a validation check for social number in Brazil), and the results are below:

validating screen in iOS with Swift

validating screen in iOS with Swift

For me the results are cool and work! I really enjoy work with Swift. 🙂

Sempre quis algo assim e perdi algumas oportunidades antes. Quase tive uma chance em duas gigantes mas sempre tem que ter aquela sorte a mais né. Em Agosto de 2015 recebi a proposta de trabalhar em casa numa startup em ótimo ritmo de crescimento, larguei um trabalho fixo de cinco anos para buscar novos desafios novamente no mundo dos portáteis, hoje mobiles, além é claro de uma oportunidade de trabalhar remoto. Trabalhar em casa as vezes passa a impressão para algumas pessoas de que tudo vai ser mais fácil, você não irá ter nenhum problema de adaptação e você não vai precisar se esforçar muito, se você acha isso está muito enganado. Na minha primeira experiência posso relatar alguns pontos positivos e outros nem tanto assim.

Positivos
– Trânsito. Você até esquece que existe. Isso foi um dos fatores que mais me influenciaram pois aqui na minha cidade o bixo pega.
– Tempo. Para mim realmente a sensação de horas a mais para fazer algo tornou-se real. Isso não quer dizer que se você não for organizado, essas horas não sejam pura procrastinação.

Negativo
– Sociabilidade. Somos seres humanos e como tais precisamos nos socializar com outras pessoas, depois de um tempo isso incomoda um pouco alguns, para mim foi um pouco mais fácil pois sou bem casado. 🙂
– Comida. É muito bom poder comer melhor e cozinhar, mas acredite, nem todo mundo gosta de cozinhar todos os dias durante um mês ou mais. Depois de um tempo você precisa dar uma saidinha para almoçar alguns dias na semana.
– Sedentarismo. Por vezes é necessário esticar umas horas de trabalhos a mais ou simplesmente querer descansar um pouco e comer umas guloseimas, muitas vezes esquecemos até de levantar da cadeira por alguns minutos, e beber uma água. Lembre-se o ser humano precisa de 3 litros por dia! 😛

Eu acho que nem todo mundo está pronto pra uma mudança assim, mas acredito que a maioria possa se adaptar. Ee eu pudesse dar algumas dicas a quem pensa em fazer isso, eu talvez falasse:
– Seja organizado. Separe um caderninho, sua planilha ou qualquer outro método que usa para ajudar a se organizar e use-o! Use bastante.
– Tenha os horários corretos. Saiba que deve dar exemplo principalmente por estar trabalhando remotamente e não perca seus compromissos. Saiba também quando parar e esquecer um pouco do trabalho.
– Mantenha todos os interessados e principalmente as pessoas a quem você responde, o status das coisas que você está fazendo e tente sempre cumprir os prazos.
– Ambiente de trabalho. Independente da sua profissão se você vai trabalhar remotamente você vai precisar usar sistemas de vídeo conferência, compartilhamento de telas, edição se documentos na nuvem, etc. Manter uma sala separada ou pelo o menos uma mesa que seja o seu “escritório” é essencial para mim, sempre mantenha-o limpo e organizado. Mantenha tudo o que você precisa para trabalhar ao seu alcance.
– Se exercite! Pratique exercício quando puder, se for disciplinado pelo o menos umas três vezes por semana, mas ao menos faça caminhadas fora de sua casa para manter também a saúde mental.

Bom, por hora é isso. Depois tem mais!

O intuito deste post não é mostrar os melhores documentos nesta disciplina mas sim algumas referências úteis para compreender mais a fundo este tema e quem sabe até para ajudar na publicação de futuros artigos. Durante minhas pesquisas em segurança da informação, voltadas principalmente para Linux mas com base em outros sistemas também, tive certa dificuldade em achar materiais de qualidade e tive de fazer uma pesquisa extensa, aqui neste post recomendo alguns dos livros e artigos que li e achei bem legais nesta disciplina, além de ler estes documentos você pode utilizá-los em seus artigos relacionados a segurança sem medo. São eles:

  • Communication Theory of Secrecy Systems, 1949. Escrito por Claude Shannon este material é um dos mais importantes documentos escritos e é a base da teoria da criptografia e sobre sistemas secretos.
  • The codebreakers : the story of secret writing, 1967. David Kahn produziu um livro espetacular sobre a história da criptografia, contém histórias fantásticas sobre eventos de criptografia durante a história.
  • The Protection of Information in Computer Systems, 1975. Contém um dos primeiros materiais escritos sobre a proteção das informações em computadores. Escrito por SALTZER, Jerome H. e SCHROEDER, Michael D.
  • New directions in cryptography, 1976. Escrito pelos famosos criptográfos Diffie Whitfield e Martin Hellman, fornece a base da criptografia moderna, introduz conceitos de chaves públicas e novas idéias que foram utilizadas nos anos seguintes.
  • Trusted computer system evaluation criteria, 1985. É um documento do departamento de defesa americano mostrando a base de um sistema de avaliação de segurança em computadores.
  • Applied Cryptography: Protocols, Algorithms, and Source Code in C, 1995. Excelente material descrevendo algoritmos de forma teórica e técnica para os amantes da criptografia. Escrito pelo renomado autor Bruce Schneier.
  • Handbook of applied cryptography, 1996. É um livro grátis disponível na internet que descreve a criptografia e alguns de seus algoritmos. MENEZES, Alfred e OORSCHOT, Paul C. van e VANSTONE, Scott A.
  • Role-Based Access Control Model, 1996. Neste artigo Ravi Sandhu et all. descreve os principais conceitos de um sistema de controle de acesso baseado em RBAC.
  • A Common Language for Computer Security Incidents, 1998. John Howard e Thomas Longstaff – Material que contém uma das bases para tratamento e reports de incidentes relacionados a segurança da informação.
  • Computer Security: Will We Ever Learn? 2000. Bruce Schneier explica neste artigo porque a segurança é um processo e não um produto.
  • Linux Security Modules: General Security Hooks for Linux, 2001. SMALLEY, Stephen e FRASER, Timothy e VANCE, Chris explicam os conceitos básicos da implementação de funções genéricas comuns aos módulos de segurança do kernel do linux.
  • The design of Rijndael: AES — the Advanced Encryption Standard, 2002. Descreve o funcionamento do padrão AES utilizado em larga escala nos negócios. DAEMEN, Joan e RIJMEN, Vincent.
  • Linux security module framework, 2002. Excelente documento descrevendo o framework de segurança do Linux. WRIGHT, Chris e COWAN, Crispin e MORRIS, James e SMALLEY, Stephen e KROAH-HARTMAN, Greg
  • Computer Security: Art and Science, 2003. Matt Bishop descreve toda a base de segurança da informação, um dos livros mais comprados no Amazon sobre o tema.
  • A arte de enganar, 2003. Kevin Mitnick um dos hackers mais procurados pelo FBI em sua época explica os conceitos da engenharia social e como eles podem ser danosos quando aplicados as organizações.
  • NBR 17799: Tecnologia da Informaçãoo – Técnicas de Segurança – Código de Prática para controles de segurança da informação. A norma brasileira que discute as melhores práticas para aplicação de uma política de segurança da informação eficiente.
  • Criptografia em Software e Hardware, 2005. MORENO, Edward David e PEREIRA, Fábio Dacêncio and CHIARAMONTE, Rodolfo Barros dão uma aula sobre os aspectos da criptografia moderna, excelente livro em português.
  • Data Communications and Networking, 2007. FOROUZAN, B.A. e FEGAN, S.C. abordam praticamente tudo o que é possível ser dito sobre comunicação de redes físicas e lógicas.
  • Fundamentals of Risk and Insurance, 2008. Uma visão interessante dos especialistas VAUGHAN, Emmett J. e VAUGHAN, Therese M. sobre o gerenciamento de riscos em organizações.
  • Computer security, 2008. STALLINGS, William e BROWN, Lawrie – Excelente livro que aborda os tópicos e conceitos básicos sobre segurança da informação.
  • Hacking Exposed Linux, 2008. Peter Herzog e uma equipe de profissionais de segurança abordam as vulnerabilidades ao qual o Linux está exposto.
  • Computer and Information Security Handbook, 2009. VACCA, John R. – Se eu tivesse de escolher um único livro sobre segurança da informação na minha biblioteca seria este sem dúvidas. COMPLETO. Um MUST HAVE pra especialistas em segurança.
  • Linux Kernel Vulnerabilities: State-of-the-art Defenses and Open Problems, 2011. Um artigo interessante sobre vulnerabilidades no Kernel do Linux. CHEN, Haogang e MAO, Yandong e WANG, Xi e ZHOU, Dong e ZELDOVICH, Nickolai e KAASHOEK, M. Frans
  • What does SELinux do to contain the the bash exploit?, 2014. Dan Walsh um dos arquitetos e criadores do SELinux mostra o que este módulo de segurança pode fazer para mitigar os riscos do ShellShock
  • Red Hat Enterprise Linux 7: A Guide to Securing Red Hat Enterprise Linux 7, 2015. Neste guia a Red Hat mostra algumas técnicas de hardening no Linux. PRPIĈ, Martin and CAPEK, Tomáŝ and WADELEY, Stephen and RUSEVA, Yoana and SVOBODA, Miroslav and Krátký, Robert

Também tive a oportunidade de gerar um BiBTeX com todos estes documentos para ser adicionado na bibliografia de um documento LaTeX, se alguém estiver interessado em uma cópia é só me mandar um e-mail 🙂 É isso, espero que curtam a leitura!

Some days ago I began to work with Swift, the new programming language of Apple, and iOS! Some people even said that I betrayed the movement! LOL! Really, I feel a little sad to let the open source projects in background for a time but for other side I am really motivated to work with new things and learn new technologies.

Swift is a mix of the best of programming languages, she have tuples, dictionaries, nested functions and little new concepts like optionals! I am really enjoying learning a lot with my new tech friends and really liking the new spirit of innovation that surrounds here.

Some basic tips of Swift:

– Variables are generic but you also can put his value type.

– You need ‘let’ or ‘var’ to declare one variable.
let something: String = “This is a immutable string”
var somethingOther = “This is a muttable string”

– Enums can be almost anything not just only numbers.

– Cases in switch can do amazing things like compare if value is some value type or another.

– Default parameters in functions are awesome like in Python!

– Doing for-loops are very fun!
for i in 1..<someVariable.count { makeWhatYouNeed() }

– Lazy properties are crazy and useful
private var someNasty: String
var usefulThing:String { get { return someNasty } set { someNasty = usefulThing } }

It’s easy create some fun to a nerdy guy! For the first time in my life, I have to thank to Apple for this!

Hello friends, I’ve been using KVM a lot of months until now and every new host server that I create I need to change the way of how Slackware seems to create cgroups, libvirt doesn’t function very good if you don’t create specific directories in ‘/sys/fs/cgroup’ tree. So, to do that for me I made this script below

# cat /etc/rc.d/rc.cgroup

#!/bin/sh
#
# /etc/rc.d/rc.cgroup: cgroups init script
# Alexandre Mulatinho <alex@mulatinho.net>
# Unmount /sys/fs/cgroup
umount /sys/fs/cgroup

# Mount cgroup_root in /sys/fs/cgroup
mount -t tmpfs -o mode=755,rw cgroup_root /sys/fs/cgroup/

# Mount all the subsystems available in /sys/fs/cgroup as individual directory
for i in $(lssubsys -a | sed -e 's/,/ /g');
do
    mkdir -pv /sys/fs/cgroup/$i
    mount -v -t cgroup -o $i $i /sys/fs/cgroup/$i
done

# chmod u+x /etc/rc.d/rc.cgroup

And now everytime my slackware system boot, my cgroups tree are build in right way that KVM and libvirt can use him to manipulate things like memory, cpu, io, disk, etc. Hope it helps someone else 🙂

%d blogueiros gostam disto: