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

01 - Passo

Realize a instalação da biblioteca langchain.

pip install langchain

02 - Passo

Realize a instalação da biblioteca python-dotenv, para utilizar as variváveis do arquivo .env

pip install python-dotenv

03 - Passo

Para este exemplo vou utilizar a API da OpenAI

Acesse o site platform.openai.com/settings/organization/api-keys e gere a API Key.

04 - Passo

No arquivo .env insira a API OPENAI_API_KEY.

OPENAI_API_KEY="COLOQUE AQUI SUA API KEY DA OPENAI" 

05 - Passo

Realize a instalação da biblioteca langchain-openai.

pip install langchain-openai

06 - Passo

Prepare o código para realizar a leitura da variável OPENAI_API_KEY do arquivo .env

07 - Passo

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?")
]

08 - Passo

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?")
]

09 - Passo

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}}

10 - Passo

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)

11 - Passo

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}}

12 - Passo

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)

13 - Passo

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.

14 - Passo

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)

15 - Passo

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.

Criando o LangServe

01 - Passo

Realize a instalação da biblioteca "langserve[all]"

pip install "langserve[all]"

02 - Passo

No codigo.py comente as linhas abaixo, para que possamos utilizar apenas a chain.

#texto = chain.invoke({"framework": "NIST", "tema":"Phishing"})

#print(texto)

03 - Passo

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)

04 - Passo

Abra o navegador e acesse:

  • http://localhost:8000/cyber/playground

05 - Passo

Digite o nome do Framework e o Tema, em seguida clique em Start, exemplo:

  • Framework: NIST
  • Tema: Phishing

06 - Passo

Resultado!

07 - Passo

Observe os passos que foram executados.

  • ChatPromtpTemplate: Aplicação do Framework e Tema no Template.
  • ChatOpenAI: Pesquisa utilizando o ChatGPT.
  • StreOutputParser: Estruturando o Resultado.

Criando um Client para consumir a Chain Remotamente

01 - Passo

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

Download do Código



👍 Se este artigo te ajudou compartilhe!



  Autor

Marcos Henrique

 São Paulo/SP



  Ferramentas

© 2025 - SecurityAI

Contato