Segurança & Inteligência Artificial
LangChain é um framework voltado para facilitar a construção de aplicações de Inteligência Artificial que interagem com modelos de linguagem avançados, como o ChatGPT. Ele simplifica a integração de diferentes componentes, permitindo que desenvolvedores criem fluxos mais complexos de interação com IA de forma modular e eficiente.
Como funciona?
Funciona como uma camada intermediária entre o desenvolvedor e os modelos de IA. Ele permite estruturar consultas e respostas, integrar diferentes fontes de dados (como bancos de dados, APIs e documentos), além de possibilitar a criação de cadeias lógicas que guiam a IA para respostas mais precisas.
Por exemplo, ao invés de apenas enviar uma pergunta direta para um modelo de IA, o LangChain pode quebrar a solicitação em várias etapas, consultar diferentes bases de conhecimento e refinar a resposta antes de apresentar ao usuário. Isso melhora a precisão e confiabilidade das respostas, tornando o sistema mais robusto.
Site Oficial: www.langchain.com
Realize a instalação da biblioteca langchain.
pip install langchain
Realize a instalação da biblioteca python-dotenv, para utilizar as variváveis do arquivo .env
pip install python-dotenv
Para este exemplo vou utilizar a API da OpenAI
Acesse o site platform.openai.com/settings/organization/api-keys e gere a API Key.
No arquivo .env insira a API OPENAI_API_KEY.
OPENAI_API_KEY="COLOQUE AQUI SUA API KEY DA OPENAI"
Realize a instalação da biblioteca langchain-openai.
pip install langchain-openai
Prepare o código para realizar a leitura da variável OPENAI_API_KEY do arquivo .env
Crie a lista de mensagens para interagir com o ChatGPT.
from dotenv import load_dotenv import os from langchain_core.messages import SystemMessage, HumanMessage # type: ignore load_dotenv() api_key = os.getenv("OPENAI_API_KEY") mensagens = [ SystemMessage("Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do NIST."), HumanMessage("Quais são os principais controles do NIST para proteção de dados?") ]
Crie o modelo de interação com o ChatGPT.
from dotenv import load_dotenv import os from langchain_core.messages import SystemMessage, HumanMessage # type: ignore load_dotenv() api_key = os.getenv("OPENAI_API_KEY") mensagens = [ SystemMessage("Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do NIST."), HumanMessage("Quais são os principais controles do NIST para proteção de dados?") ]
Resposta do ChatGPT com base na estrutura das Mensagens.
content='O NIST (National Institute of Standards and Technology) fornece diretrizes abrangentes para a proteção de dados através de várias publicações, especialmente no contexto do NIST Cybersecurity Framework e a série SP 800. Os principais controles para proteção de dados abrangem diferentes áreas da cibersegurança. Aqui estão alguns dos componentes e controles essenciais:\n\n1. **Identidade e Gestão de Acessos (IAM)**:\n - Controle de acesso: Implementação de políticas restritivas para acesso a dados, garantindo que apenas usuários autorizados possam acessar informações confidenciais.\n - Autenticação multifator (MFA): Requerer múltiplos fatores de autenticação para aumentar a segurança do acesso.\n\n2. **Proteção de Dados**:\n - Criptografia: Uso de criptografia para proteger dados em trânsito e em repouso.\n - Mascaramento de dados: Implementar técnicas para anonimizar ou mascarar dados sensíveis em ambientes de teste ou para usuários não autorizados.\n\n3. **Segurança de Comunicações**:\n - Proteção de redes: Uso de firewalls, segmentação de redes, e implementação de VPNs para proteger dados transmitidos através de redes.\n - Monitoramento de tráfego: Usar IDS/IPS para monitorar tráfego e detectar atividades anômalas.\n\n4. **Gestão de Vulnerabilidades**:\n - Atualizações de segurança: Garantir que todos os sistemas e software estejam atualizados com as últimas correções de segurança.\n - Scans de vulnerabilidades: Realizar avaliações regulares para identificar e corrigir vulnerabilidades.\n\n5. **Resposta a Incidentes**:\n - Planos de resposta a incidentes: Desenvolver e manter procedimentos para responder rapidamente a incidentes de segurança.\n - Análise pós-incidente: Conduzir revisões detalhadas após qualquer incidente para melhorar a postura de segurança.\n\n6. **Conscientização e Treinamento**:\n - Treinamento contínuo: Prover treinamento regular para usuários e administradores sobre políticas e práticas de segurança, incluindo como identificar ataques de phishing.\n\n7. **Avaliação e Gestão de Riscos**:\n - Avaliação de riscos: Identificar e avaliar riscos para os dados, priorizando medidas de mitigação para aquelas com maior impacto.\n - Gestão de fornecedores: Avaliar a segurança dos fornecedores externos que têm acesso aos dados ou sistemas críticos.\n\n8. **Continuidade de Negócios e Recuperação de Desastres**:\n - Backup regular: Implementar backups regulares de dados críticos e testar a restauração dos mesmos.\n - Planos de continuidade: Desenvolver e manter um plano de continuidade de negócios para assegurar que operações críticas possam ser mantidas em caso de interrupções.\n\nEsses controles são partes integradas de uma abordagem abrangente para a segurança de dados, conforme descrito nos documentos do NIST, como o framework de segurança cibernética. Implementar esses controles ajudará a proteger dados contra uma ampla variedade de ameaças e assegurar a confidencialidade, integridade e disponibilidade das informações.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 627, 'prompt_tokens': 49, 'total_tokens': 676, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_50cad350e4', 'finish_reason': 'stop', 'logprobs': None} id='run-f83d0e00-4bb7-4ddb-ba4a-3ffe80385e45-0' usage_metadata={'input_tokens': 49, 'output_tokens': 627, 'total_tokens': 676, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
Realizando apenas a extração do texto utilizando a biblioteca StrOutputParser
from dotenv import load_dotenv import os from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI load_dotenv() api_key = os.getenv("OPENAI_API_KEY") mensagens = [ SystemMessage("Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do NIST."), HumanMessage("Quais são os principais controles do NIST para proteção de dados?") ] modelo = ChatOpenAI(model="gpt-4o") parser = StrOutputParser() resposta = modelo.invoke(mensagens) texto = parser.invoke(resposta) print(resposta)
Texto extraído com sucesso!
content='O NIST (National Institute of Standards and Technology) fornece diretrizes abrangentes para a proteção de dados através da série SP 800, especialmente o framework NIST Cybersecurity Framework (CSF) e a publicação NIST SP 800-53. Os principais controles para a proteção de dados incluem:\n\n1. **Controle de Acesso (AC)**: Limitar o acesso a informações e recursos apenas a indivíduos ou sistemas autorizados. Isso inclui autenticação forte, gerenciamento de contas e controles de sessão.\n\n2. **Proteção de Dados (PD)**: Assegurar que os dados sejam protegidos tanto em repouso quanto em trânsito. Isso pode incluir criptografia, mascaramento de dados e uso de tecnologias de Data Loss Prevention (DLP).\n\n3. **Segurança das Comunicações (SC)**: Proteger a integridade e confidencialidade da informação transmitida pela rede, usando técnicas como VPNs, TLS, e IPSec.\n\n4. **Gestão de Configuração (CM)**: Garantir que apenas dispositivos e software autorizados sejam instalados, mediante controle de inventário e aplicação de patches.\n\n5. **Avaliação e Autorização de Segurança (CA)**: Realizar avaliações contínuas e controladas dos sistemas e monitorar a eficácia dos controles de segurança através de auditorias e avaliações de risco.\n\n6. **Monitoramento Contínuo (CM)**: Implementar ferramentas e processos para monitoramento contínuo de redes, sistemas e usuários, para detectar atividades suspeitas.\n\n7. **Plano de Resposta a Incidentes (IR)**: Preparar e implementar um plano de resposta a incidentes para identificar, responder, e recuperar-se de ataques cibernéticos.\n\n8. **Plano de Continuidade de Negócios e Recuperação de Desastres (CP)**: Estabelecer planos e procedimentos para garantir a disponibilidade dos sistemas críticos durante e após um evento de interrupção.\n\n9. **Conscientização e Treinamento da Segurança (AT)**: Prover aos usuários e operadores uma compreensão contínua das políticas e procedimentos de segurança.\n\n10. **Proteção Física e Ambiental (PE)**: Assegurar que as instalações e recursos físicos estejam protegidos contra acesso não autorizado e condições ambientais.\n\nEstes controles são parte de uma abordagem abrangente à segurança cibernética que deve ser adaptada às necessidades específicas de cada organização. Seguir as diretrizes do NIST pode ajudar a proteger dados e infraestruturas críticas de ameaças cibernéticas.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 507, 'prompt_tokens': 49, 'total_tokens': 556, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_4691090a87', 'finish_reason': 'stop', 'logprobs': None} id='run-5e5eb2b5-9bce-439c-91c6-956c65c2dfe8-0' usage_metadata={'input_tokens': 49, 'output_tokens': 507, 'total_tokens': 556, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
Criando a Chain.
Passando os dados do modelo para o parse.
from dotenv import load_dotenv import os from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI load_dotenv() api_key = os.getenv("OPENAI_API_KEY") mensagens = [ SystemMessage("Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do NIST."), HumanMessage("Quais são os principais controles do NIST para proteção de dados?") ] modelo = ChatOpenAI(model="gpt-4o") parser = StrOutputParser() chain = modelo | parser #resposta = modelo.invoke(mensagens) #texto = parser.invoke(resposta) texto = chain.invoke(mensagens) print(texto)
Resultado!
O NIST (National Institute of Standards and Technology) fornece diretrizes abrangentes para a proteção de dados através de várias publicações, sendo uma das mais fundamentais o NIST Special Publication 800-53, que apresenta controles de segurança e privacidade para sistemas de informação federais. Aqui estão alguns dos principais controles recomendados para proteção de dados: 1. **Gerenciamento de Identidade e Acesso (Access Control - AC):** - Implementação de políticas e procedimentos de controle de acesso. - Uso de autenticação multifator (MFA) para proteger contas. - Controle de acesso baseado em papéis (RBAC) para minimizar privilégios. 2. **Gerenciamento de Ativos e Configuração (Configuration Management - CM):** - Realização de inventário de hardware e software. - Manutenção de configurações seguras e gestão de mudanças. 3. **Proteção de Dados em Trânsito e em Repouso:** - Uso de criptografia para dados em trânsito e armazenamento. - Implementação de TLS/SSL para proteger dados durante a transmissão. 4. **Controle de Informação e Comunicação (System and Communications Protection - SC):** - Implementação de firewalls e sistemas de prevenção/detecção de intrusões (IDS/IPS). - Monitoramento de tráfego de rede e atividades de sistema. 5. **Gerenciamento de Incidentes (Incident Response - IR):** - Desenvolvimento de um plano de resposta a incidentes. - Realização de exercícios periódicos para testar a eficácia do plano. 6. **Avaliação de Risco (Risk Assessment - RA):** - Identificação e avaliação de riscos a ativos de informação. - Estabelecimento de planos de atenuação e aceitação de risco. 7. **Educação e Conscientização sobre Segurança (Awareness and Training - AT):** - Treinamento regular de usuários em práticas seguras e conscientização sobre ameaças. 8. **Proteção Contínua e Monitoramento (Continuous Monitoring - CA):** - Implementação de sistemas de monitoramento contínuo para identificar e reagir a ameaças em tempo real. 9. **Proteção de Mídia (Media Protection - MP):** - Controle e sanitização de mídias de armazenamento antes do descarte. - Implementação de políticas de remoção segura de dados. 10. **Gestão de Segurança Física (Physical and Environmental Protection - PE):** - Controle de acesso físico a instalações onde dados são armazenados. - Proteção contra desastres ambientais. Esses controles fazem parte de um framework mais amplo de segurança e privacidade para garantir que organizações possuam defesas adequadas para proteger seus dados contra acessos não autorizados, uso indevido e outras ameaças. É importante que as organizações adaptem esses controles às suas necessidades específicas e ambientes operacionais.
Criação de Promtpts para o Sistema através dos Templates de Mensagens.
No template substitua NIST por {framework} e proteção de dados por {tema}.
from dotenv import load_dotenv import os from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI load_dotenv() api_key = os.getenv("OPENAI_API_KEY") mensagens = [ SystemMessage("Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do NIST."), HumanMessage("Quais são os principais controles do NIST para proteção de dados?") ] modelo = ChatOpenAI(model="gpt-4o") parser = StrOutputParser() chain = modelo | parser #resposta = modelo.invoke(mensagens) #texto = parser.invoke(resposta) template_mensagem = ChatPromptTemplate.from_messages([ ("system", "Você é um assistente especializado em segurança cibernética. Responda com base nas diretrizes do {framework}"), ("user", "Quais são os principais controles do {framework} para {tema}"), ]) #template_mensagem.invoke({"framework": "NIST", "tema":"Phishing"}) chain = template_mensagem | modelo | parser texto = chain.invoke({"framework": "NIST", "tema":"Phishing"}) print(texto)
Resultado para o Tema: Phishing
O NIST (National Institute of Standards and Technology) fornece diretrizes para proteger contra phishing principalmente através dos frameworks como o NIST Cybersecurity Framework (CSF) e as publicações da série 800. Aqui estão alguns dos principais controles e práticas recomendadas que o NIST sugere para combater phishing: 1. **Educação e Conscientização:** - Impulsionar programas contínuos de treinamento de conscientização de segurança para educar os usuários sobre os riscos de phishing e como identificar e reportar e-mails suspeitos. (Ver NIST SP 800-50 para treinamento de conscientização de segurança da informação) 2. **Autenticação Multifatorial (MFA):** - Implementar autenticação multifator para fornecer uma camada adicional de segurança ao acessar sistemas e dados sensíveis. Isso ajuda a prevenir o comprometimento das credenciais, mesmo se os dados de login forem capturados através de phishing. 3. **Políticas de Filtragem de E-mails e Navegação Segura:** - Usar soluções de segurança para filtrar e-mails de entrada, marcando ou bloqueando mensagens suspeitas de phishing. Inclui filtros antispam, filtros de anexos de e-mails e inspeção de links. (Ver NIST SP 800-177 para segurança de e-mail) 4. **Monitoramento e Detecção de Anomalias:** - Monitorar redes e sistemas para atividades incomuns que possam indicar um ataque de phishing bem-sucedido. Isso inclui a coleta e análise de registros de sistema e de rede. (Conforme orientado no NIST SP 800-94, Guia de Gerenciamento de Detecção de Intrusões) 5. **Gerenciamento de Patches e Vulnerabilidades:** - Manter todos os sistemas e softwares atualizados com os patches mais recentes para minimizar o risco de exploração de vulnerabilidades. (Conforme detalhado no NIST SP 800-40) 6. **Proteção e Rotulagem de Dados:** - Implementar políticas de proteção e categorização de dados para proteger informações sensíveis e assegurar que dados não sejam enviados inadvertidamente em resposta a um e-mail de phishing. 7. **Simulações de Phishing:** - Conduzir simulações regulares de ataques de phishing para testar a eficácia de programas de conscientização e a capacidade dos usuários de identificar ataques falsos. 8. **Resposta a Incidentes:** - Desenvolver, implementar e treinar equipes em planos de resposta a incidentes específicos para phishing, incluindo procedimentos para isolar sistemas afetados e mitigar impactos. (Ver NIST SP 800-61, Guia de Gerenciamento de Incidentes de Segurança de Computador) O NIST não promove práticas específicas de produto nem endossa soluções comerciais específicas, mas suas diretrizes ajudam a estabelecer uma base sólida para a criação e implementação de controles de segurança que ajudem a mitigar a ameaça de phishing.
Realize a instalação da biblioteca "langserve[all]"
pip install "langserve[all]"
No codigo.py comente as linhas abaixo, para que possamos utilizar apenas a chain.
#texto = chain.invoke({"framework": "NIST", "tema":"Phishing"}) #print(texto)
Crie o server.py, em seguida execute o script.
from codigo import chain from fastapi import FastAPI from langserve import add_routes app = FastAPI(title="SecurityAI", description="Escolha um tema e obtenha respostas de qualquer framework.") add_routes(app, chain, path="/cyber") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="localhost", port=8000)
Abra o navegador e acesse:
Digite o nome do Framework e o Tema, em seguida clique em Start, exemplo:
Resultado!
Observe os passos que foram executados.
Crie o client.py, em seguida execute o script.
from langserve import RemoteRunnable chain_remota = RemoteRunnable('http://localhost:8000/cyber') texto = chain_remota.invoke({"framework": "NIST", "tema":"Ramsonware"}) print(texto)
python cliente.py