Estou prestes a começar um diploma de quatro anos em segurança da informação na Purdue. O diploma não exige nenhum curso de programação. Portanto, a única vez que poderei fazer uma é a eletiva ocasional. Portanto, a maior parte do meu aprendizado será por conta própria. No início do meu último ano do ensino médio, decidi mudar completamente para o Linux. Até agora, tenho aprendido algumas coisas sobre Linux e segurança. No entanto, também acredito que será importante para mim também aprender algumas linguagens de programação.
Basicamente, estou planejando aprender a programar lado a lado e aprender a usar o Vim. Portanto, provavelmente será um processo lento. No final, acho que valerá a pena. Como eu disse, vou abordar a segurança, então, principalmente, vou criar aplicativos relacionados à segurança, a maioria dos quais relacionados à rede. Eu também gostaria de começar a desenvolver aplicativos Android, mas isso acontecerá mais tarde.
Com isso dito, eu tenho algumas idéias. Eu estava pensando em começar com JavaScript, porque é multiplataforma e já o vi sugerido antes. Eu também tenho ouvido muito sobre Ruby ou poderia seguir a rota natural do Linux com C. Qual direção devo seguir?
Você descobrirá que todo mundo recomendará apenas seu idioma favorito. Meu idioma favorito é Perl, e é isso que eu recomendo. :) No entanto, além da minha preferência pessoal, existem algumas ótimas razões pelas quais você deve considerar o uso de perl:
Primeiro, perl é uma maravilhosa linguagem de uso geral. É fácil começar no perl escrevendo scripts simples para fazer o mesmo tipo de ação que você faz nos scripts shell, como manipular arquivos e tomar decisões com base na entrada do usuário. Isso fornece uma introdução muito fácil e gradual às idéias gerais de programação. O Perl já existe há algum tempo, portanto há muitos recursos (livros e sites) para começar.
Segundo, o perl é uma linguagem incrivelmente poderosa e expressiva que suporta todos os recursos de programação modernos. Uso-o há mais de quinze anos e ainda estou aprendendo novas maneiras de fazer as coisas com mais eficiência. Por exemplo, se você deseja explorar a programação orientada a objetos, o perl tem isso (principalmente através do Moose ).
Terceiro, o perl vem com o poder e a flexibilidade quase infinitos de seu repositório oficial de complementos, o CPAN . Por exemplo, para seguir a idéia de escrever um software de segurança, diga que deseja desenvolver algum tipo de scanner de segurança de rede personalizado. Em vez de escrever tudo isso você mesmo, você pode começar usando o NMAP :: Scanner como um mecanismo de verificação e, em seguida, escrever seus próprios ajustes e melhorias.
Por fim, se você deseja explorar a programação na web, o Perl também tem isso. Uma maneira moderna e popular de escrever software da Web no Perl é o Catalyst , que fornece uma moderna estrutura da Web MVC para o desenvolvimento rápido de qualquer tipo de aplicativo da web.
Juntando tudo isso, a vantagem do perl é que ele permite que você comece a escrever pequenos scripts e programas de linha de comando, e que gradualmente passe a escrever aplicativos modernos com todos os recursos. Obviamente, o preço dessa flexibilidade é complexidade. Cabe a você estudar e aprender como fazer as coisas da maneira certa, o perl não aplica boas práticas da mesma forma que outras línguas. Pessoalmente, gosto dessa liberdade, especialmente junto com todos os ótimos recursos disponíveis na Web para aprender a usar o perl.
fonte
Três idiomas o manterão em boa posição. Em ordem decrescente de importância (ou seja, o primeiro é o mais importante):
fonte
script language
, comopython
ouPHP
.Você deve aprender várias línguas. Eu sugeriria começar com Python. É amplamente recomendado por ser fácil de aprender e por ser muito útil, muitos materiais excelentes de auto-estudo estão disponíveis gratuitamente, e acho que é amplamente utilizado por profissionais de segurança de TI. Quase toda vez que vejo profissionais de segurança postando código de demonstração, é Python.
fonte
Eu sou o único a pensar OMG !!!! neste ponto?
Eu diria que sim. Embora você não esteja realmente esperando se tornar um programador proficiente, provavelmente precisará das habilidades necessárias para simular / recriar ataques e entender como o processo de programação funciona. Você também precisará das habilidades para analisar dados e extrair informações de fontes em massa (como logs). JimB mencionou o bash - e, embora você sem dúvida esteja usando isso - leva apenas algumas horas para aprender os bits essenciais. Atualmente, o único lugar em que você provavelmente verá o bash é nos sistemas Linux - mas os outros shells são muito semelhantes.
Eu recomendaria aprender awk e / ou Perl para trituração de dados. Não se preocupe com qualquer requisito para marcar uma caixa orientada a objetos - mas eu recomendaria examinar também langauges não processuais.
Aprender C também o expõe a muitas informações sobre como o código se transforma em um programa executável (compilar é apenas uma etapa de um processo muito complexo).
A escolha óbvia para alguém interessado no desenvolvimento móvel / Android seria o java - mas o java tenta muito isolar o desenvolvedor de ter que lidar com as realidades dos protocolos operacionais e operacionais - é minha experiência que é aqui que você obtém problemas de segurança com o Java aplicativos. isto é, pode ajudá-lo a atingir seu objetivo final, e ficará bem em seu currículo, mas não espere que o aprendizado de Java complemente muito seu conhecimento de segurança.
fonte
Meu conselho:
bash
(e seus tipos) não são linguagens de programação de uso geral. Embora seja possível realizar scripts sofisticadosbash
, não é a melhor maneira de aprender programação em geral. É a maneira mais natural de realizar tarefas de administração de sistemas que giram principalmente em torno da execução de outros programas, manipulando seus arquivos e diretórios de dados e organizando entradas e saídas de e para eles. Sebash
for um martelo, reserve-o para problemas que realmente parecem unhas. Aprender a fazer qualquer coisa não trivialbash
será consideravelmente mais fácil se você aprender alguns subconjuntos muito pequenos desed
eawk
(uma vez que a manipulação de stringsbash
é amplamente inspirada na sintaxe de operações semelhantes nessas "pequenas" linguagens).Eu recomendo que você leia um texto introdutório em C e gaste algum tempo executando os comandos
strace
eltrace
em alguns comandos simples de utilitários comols
emkdir
e/bin/echo
etc. (Na verdade, atualmente, eu sugiro queltrace -S
substitua,strace
mas invista na saída dos comandos e no altrace
saída aumentada pela-S
opção será extremamente educacional).C é a principal linguagem de programação na qual o kernel do Linux e o GNU libc são gravados. (Peças pequenas estão em montagem). Quase todos os programas em um sistema Linux (ou outro tipo UNIX) estão vinculados às bibliotecas C (libc). Os principais intérpretes Perl e Python (e a maioria das outras linguagens de script) também são escritos em C. Esses programas (o kernel, as bibliotecas comuns do sistema e os vários intérpretes da linguagem de script) são todos escritos pelos programadores C, seu design e os recursos são fortemente influenciados pelas implementações subjacentes. Portanto, um entendimento mais profundo de qualquer um desses itens implica o entendimento C. Você não precisa saber nada sobre C ++ nem Java para entender a programação nesse nível. (Cada um pode ser interessante e necessário por si só, dependendo da sua carreira,
Portanto, se você concorda com minhas premissas até agora, reduzimos para uma escolha entre Perl e Python.
Aqui é onde começam as verdadeiras guerras de chamas.
Meu conselho é focar primeiro no Python (2.x). Python tem uma sintaxe relativamente simples e consistente. Você pode aprender o básico da sintaxe Python em algumas horas e essa é a grande maioria da sintaxe que você encontrará. Existem apenas alguns recursos (compreensões de lista, expressões geradoras, decoradores) que são rugas da sintaxe básica. Portanto, a maior parte de seu esforço em aprender Python será dedicada a aprender as extensas bibliotecas padrão e a tentar encontrar a "melhor" maneira de usá-las (e descobrir quais são os conjuntos específicos de exceções que valem a pena manipular para tornar seus programas robustos) e, mais importante, na aprendizagem dos conceitos subjacentes.
Eu acho que as extensas bibliotecas do Python e a sintaxe relativamente simples têm duas desvantagens distintas.
Primeiro, à medida que você aprende como agir em um nível muito alto no Python, você pode achar entediante o pensamento de ter que trabalhar em um nível mais baixo. Onde trabalho Perl é o padrão. Protótipo do meu trabalho em Python, onde sei que posso fazê-lo funcionar com muito mais rapidez e confiabilidade do que em Perl; então eu temo ter que passar e portar para Perl para meus colegas. (Eu era razoavelmente bom em Perl anos antes de usar o Python - por isso não é uma questão de simples familiaridade).
A outra desvantagem é que às vezes é difícil encontrar a maneira de nível mais alto para realizar uma determinada tarefa no Python. Por exemplo, para buscar uma página da web, você pode inicialmente tentar fazê-lo com soquetes de baixo nível ... o que funcionará. No entanto, você duplicaria bastante código que já pode ser encontrado, incluindo nos módulos
urllib
e / ouurllib2
. O próprio fato de que as bibliotecas padrão, a partir da versão 2.7.1, inclui ambas, faz meu argumento. Sempre que possível, os mantenedores do Python estenderam os módulos e APIs mais antigos de forma transparente; no entanto, existem dezenas de casos em que o Python retém dois ou três módulos em que a extensão transparente não foi possível por algum motivo. (Para outro exemplo, você poderia olhar para as opções para analisar opções de linha de comando:argparse
,optparse
egetopt
. Há pouco dano em escrever seus programas usandogetopt
(o mais antigo deles). Para utilitários muito simples, com poucas opções e uma convenção rígida de chamadas (usada apenas por um pequeno grupo de pessoas, por exemplo), então não há nada inerentemente errado em passar por cima desys.argv
si mesmo. No entanto, geralmente vale a pena ler os documentos com atenção e seguir os links na parte inferior dos módulos de nível mais antigo ou mais baixo que descrevem os recursos de nível mais novo ou mais alto disponíveis.Meu conselho é baseado na minha opinião de que você deseja se concentrar em conceitos mais profundos e não precisa gastar muito do seu tempo e esforço em questões sintáticas e específicas da linguagem. A compreensão de quando usar um subprocesso, versus um encadeamento ou os recursos de multiprocessamento incluídos no Python tem relativamente pouco a ver com a linguagem e tudo a ver com a proficiência em programação, independentemente da linguagem. (No momento em que você pode entender os argumentos sobre o modelo orientado a eventos do Twisted em comparação com o encadeamento e o multiprocessamento, provavelmente você já dominou o Python e estará pronto para programar em qualquer idioma).
O contra-argumento, para Perl, é simples e prático. Existem muitos outros empregos por aí que exigirão, especificamente, habilidades com Perl. O Perl é uma linguagem poderosa e possui bibliotecas extremamente extensas. (O núcleo do Perl distribuído com a maioria dos sistemas Linux abrange uma gama menor de funcionalidades do que as bibliotecas Python padrão; presume-se que você instalará um número significativo de pacotes adicionais da sua distribuição ou através do CPAN - o Comprehensive Perl Archive Rede). (Por outro lado, há menos módulos e pacotes Python que preciso buscar separadamente ... eles estão disponíveis no PyPI - o Índice do Pacote Python).
Portanto, se você aprender Perl, terá uma vantagem para encontrar empregos, principalmente empregos de administrador de sistemas, a curto prazo. No entanto, a sintaxe de Perl é ... bem ... nas palavras de alguns de seus próprios entusiastas ... "patologicamente eclética!" O Perl pode ser extremamente conciso e seu código é preenchido com um pouco de pontuação. Aqueles que o amam argumentam incessantemente que é "fácil" e faz todo sentido - e terão inúmeras oportunidades para fazê-lo em fóruns cheios de confusão sobre exatamente como um determinado trecho de código foi interpretado. A sintaxe e o idioma usados na documentação e por quem os apóia em fóruns públicos são diferenciados ao ponto em que você pode gastar um esforço considerável para aprendê-los.
Agora, por favor, entenda que este comentário anterior é subjetivo e tendencioso. É possível que você tente o Perl e descubra que a sintaxe é intuitiva e agradável. Se assim for, mais poder para você. No entanto, pessoalmente acho que minha compreensão das idiossincrasias de Perl decai muito rapidamente. Mantenho os fundamentos, mas acho que é uma luta sempre que preciso voltar a ela por mais do que algumas linhas de código.
Existem muitas outras linguagens que você estudaria, Java, Lisp e Scheme, TCL, Scala e assim por diante. No entanto, sugiro começar com um que ofereça o melhor equilíbrio entre utilidade e simplicidade.
fonte
No mundo Linux, você deve saber duas coisas básicas:
Regular Expression
. Isso é um dever.RegEx
é uma "linguagem" universal, quando você souber usar expressões regulares, sua vida será muito mais fácil :-)quick & dirty
" é muito comum no mundo Linux. Se você pode realizar seu trabalho, por mais feia que seja a sua solução, você realiza seu trabalho.Então, se você quer aprender uma língua no Linux, você deve escolher um
script language
, comopython
,PHP
, ou mesmobash scripting
.E, minha recomendação é
PHP
. É simples e feio. Possui um manual online detalhado . Tem um bomRegEx
suporte. Isso é tudo.fonte
Você pode executar praticamente qualquer tarefa em quase qualquer idioma, portanto, a escolha certa é ditada pelo problema que você está resolvendo.
Definitivamente, vale a pena conhecer idiomas das seguintes categorias:
Eu faria um esforço para aprender C / C ++, pois isso permite corrupção da pilha e acesso direto à memória. Isso é importante se você quiser experimentar problemas de segurança. Muitas linguagens têm sintaxe do tipo C (incluindo JavaScript), por isso é um bom trampolim.
Se você estiver trabalhando muito em um shell, o que eu acho que você está aprendendo com o vim, você acabará aprendendo scripts básicos do shell como um efeito colateral. O UNIX Power Tools foi um bom livro para aprender coisas mais avançadas; Não sei se ainda está publicado.
PHP também pode ser uma boa linguagem para aprender; a principal vantagem que oferece aos novos programadores é que há muita funcionalidade embutida, e não em uma biblioteca à qual você precisaria vincular (o que não é uma tarefa complexa). Por esse motivo, a navegação nos principais documentos ensina muitas coisas.
fonte
Primeiro, alguns conselhos negativos:
Não faça isso. Encontre um editor que seja realmente confortável. Aprender o idioma e o editor é três vezes mais difícil do que aprendê-los em ordem (obviamente, o editor deve primeiro :-))
Aplicativos de segurança relacionados à rede? C é uma escolha fácil de entender aqui. Você precisará acessar a rede no nível da API do sistema, o que significa que C é o caminho a seguir. Obviamente, isso não significa que tudo precisa estar em C - uma biblioteca C + um
$favorite-high-level-language
invólucro pode economizar os aborrecimentos relacionados ao C em partes que não precisam de C.Aposto que foi sugerido em um contexto diferente do seu. O JavaScript tem seus pontos fortes, mas ainda não é uma boa linguagem de uso geral. O JS não possui bibliotecas padrão comparáveis às disponíveis para C, Python, Perl, Ruby, Java e empresa.
Falando nisso,
$favorite-high-level-language
meu conselho é seguir o Python. Ele faz interface com o C, é fornecido com muitas bibliotecas úteis e tem muito mais bibliotecas disponíveis como complementos.fonte
Não há nada de errado em aprender Javascript, mas ele é executado apenas em um navegador. Portanto, sua programação será limitada a aplicativos relacionados a páginas da web.
Provavelmente, existem tantas respostas para o 'o que é uma boa linguagem de programação para começar' quanto existem linguagens. Meu valor tuppence é que você poderia fazer pior do que começar com scripts básicos de shell, apenas vendo o que você pode fazer para automatizar tarefas sem usar nada além do shell, depois estenda isso usando Perl, ou uma linguagem semelhante que surgiu da necessidade de fazer tarefas mais complexas do que o shell é capaz, depois disso, e se você estiver realmente interessado, levará apenas algumas semanas, comece a usar C ou um derivado.
fonte
Minhas recomendações? Hummm. Bem, você pode ter que decidir como vai. Para a faixa saudável e bem-arredondada, você pode seguir a rota usual do grau CS, talvez não nessa ordem.
(1) C / C ++ - Você pode obter o material orientado a objetos e pelo menos terá tentado. C ++ é o padrão 'profissional'. (2) Montagem (apenas um pouco - isso ajudará você a entender o funcionamento real do processador, memória, etc. - você não precisa se casar com isso.) (3) Python / Perl / Bash - Obtenha estes linguagens de script inativas, elas serão mais úteis para o seu nível de Linux (4) PHP / Ruby, MySQL e HTML - Apenas comece sua programação na Web! Você entenderá todo o processo de interação servidor-cliente, outro nível de computação.
Precisa de conceitos úteis? AI, redes neurais. Estes devem arredondá-lo para fora.
Você pode escolher um deles para fazer ou tocar em todos eles. Minha língua? Todos eles, conforme necessário, mas estou programando desde 1984, e tenho um diploma em CS, jogos escritos e todos os tipos de aplicativos de sistemas embarcados. É o que eu faço. Você precisa descobrir quem você é e o que você faz. Apenas verifique se você está se divertindo.
Apreciar!
fonte
opa, erro de segurança da informação para sistemas de informação ... bem, a maior parte disso ainda se aplica
Java
Honestamente, se você estiver trabalhando no Linux e fizer um curso de programação inicial em Java, e talvez seguir mais alguns cursos de programação, as outras ferramentas como Bash sed / awk, etc ... devem se encaixar. Se você realmente entrar nos sistemas, poderá pegar C mais tarde, mas eu não diria que é uma grande demanda e nem diria que é um requisito ser um cara de sistemas - a menos que você realmente goste de sistemas internos.
YMMV
fonte